世界
我现在正在将一些 32 位 C 代码移植到 64 位平台。
对于以下代码,我认为当我添加将"-Wall -Wconversion -Wextra"
代码编译为 64 位平台(x86_64 而非 IA64)的选项时,GCC 应该会发出警告。
但是,我没有收到任何警告...
int len = strlen(pstr);
奇怪的是,当我将代码更改为以下代码时,我可以得到关于“size_t”和“int”之间转换的警告
size_t sz = strlen(pstr);
int len = sz;
环境信息:
gcc 版本 4.4.7
Linux dev217 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
任何想法为什么?
编辑:我可以用一个非常简单的程序来验证这一点。
[jsun@/tmp]
[jsun@/tmp]cat test1.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
int len = strlen("testllllll");
printf("len is %d\n", len);
return 0;
}
[jsun@/tmp]gcc -Wall -Wconversion -Wextra test1.c
[jsun@/tmp]
稍微修改一下代码后:
[jsun@/tmp]
[jsun@/tmp]cat test1.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
size_t sz = strlen("test111111");
int len = sz;;
printf("len is %d\n", len);
return 0;
}
[jsun@/tmp]gcc -Wall -Wconversion -Wextra test1.c
test1.c:在函数“main”中:
test1.c:8: 警告:从“size_t”转换为“int”可能会改变它的值
[jsun@/tmp]