Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an #ifdef ANDROID equivalent to #ifdef WIN32

Tags:

c++

android

I have some c++ code that has a bunch of #ifdef WIN32 else we assume its IOS code. However I am now trying to use this same c++ code for an android port.

Is there some sort of equivalent for #ifdef WIN32 || ANDROID?

like image 243
Metropolis Avatar asked Dec 12 '11 14:12

Metropolis


1 Answers

Macro

Regarding predefined macros, there is the famous predef.sf.net.

Looking for Android brings up the devices page. There:

Android

The following macros have to be included from the header file.

Type    | Macro           | Format  | Description
Version | __ANDROID_API__ | V       | V = API Version

Example

Android Version | __ANDROID_API__
1.0             | 1
1.1             | 2
1.5             | 3
1.6             | 4
2.0             | 5
2.0.1           | 6
2.1             | 7
2.2             | 8
2.3             | 9
2.3.3           | 10
3.0             | 11 


Examples

#ifdef __ANDROID__
# include <android/api-level.h>
#endif

#ifdef __ANDROID_API__
this will be contained on android
#endif

#ifndef __ANDROID_API__
this will NOT be contained for android builds
#endif

#if defined(WIN32) || defined(__ANDROID_API__)
this will be contained on android and win32
#endif

If you want to include a code block for versions for a high enough version, you must first check for existence, and then you can do arithmetic comparisons:

#ifdef __ANDROID_API__
# if __ANDROID_API__ > 6 
    at least android 2.0.1
# else 
    less than 2.0.1
# endif
#endif


Multiple conditions

You can't do #ifdef FOO || BAR. The standard only defines the syntax

# ifdef identifier new-line

but you can use the unary operator defined:

#if defined(FOO) && defined(BAR)

you can also negate the result using !:

#if !defined(FOO) && defined(BAR)
   this is included only if there is no FOO, but a BAR.

and of course there's a logical-or:

#if defined(FOO) || defined(BAR)
   this is included if there is FOO or BAR (or both)
like image 80
Sebastian Mach Avatar answered Sep 25 '22 18:09

Sebastian Mach