默认类型char 在 android NDK r9 和 xcode 4.6.3中的不同

测试一些代码中,发现一个奇怪的bug.最好发现是如下原因:
考虑代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char c_num;
int i_num;
c_num = -1;
i_num = c_num;
if (i_num == c_num) {
CCLOG("OK 1");
}
i_num = -1;
c_num = i_num;
if (i_num == c_num) {
CCLOG("OK 2");
}

xcode ios SDk 6.1 编译得到输出

      OK 1  
      OK 2

android NDK r9, gcc 4.8编译得到输出

      OK 1

可见,在xcode中char被定义为有符号数,而在ndk中定义是无符号数

cocos2d-x 2.1.4 启用C++11后使用 NDK r9 gcc 4.8无法编译

下载android ndk r9版本后,发现cocos2d-x无法编译通过报一大堆错误和警告,仔细查看是这两个

    warning: invalid suffix on literal; C++11 requires a space between literal and identifier
    error: format not a string literal and no format arguments

第一个警告是由于头文件不符合C++11的标准引起的,第二个警告是因为格式化字串函数产生的,只需要给gcc参数让其忽略掉这两个错误即可。
打开android项目的Application.mk文件,在APP_CPPFLAGS变量后面添加

    -Wno-format-security -Wno-literal-suffix

就可以了。