不必要的(?)Xcode警告

时间:2009-10-23 20:56:21

标签: xcode macos warnings compiler-warnings

我在Core 2 Duo上运行OS X 10.6中的Xcode。这是一个简短的程序:

#include <stdio.h>

int main () {
    long a = 8589934592L;
    printf("a = %li\n", a);
    return 0;
}

当我从命令行(gcc -pedantic)编译它时,我没有错误或警告。当我在调试配置中在Xcode中编译它时,我没有得到任何错误或警告。当我在发布配置中的Xcode中编译它时,我收到一个警告:“隐式常量转换中的溢出”。

Longs应该是64位。程序运行正常。那么发生了什么,我该如何摆脱这种警告?

3 个答案:

答案 0 :(得分:2)

检查sizeof(long)sizeof(long long),看看您对long 64位类型的假设是否正确。

我刚刚在Mac OS X 10.6.1上使用Xcode 3.2.1尝试了你的程序,并没有得到那个警告。我设法通过将目标配置设置为“32位通用”而不是“标准32/64位通用”来获取警告。确保您正在为正确的机器类型进行构建!

答案 1 :(得分:2)

在构建设置中,选中“架构”。如果这是“标准(32/64位通用)”,则将构建具有32位和64位版本的通用二进制文件。警告是针对32位构建的。

您看到的差异来自于在Debug配置中检查的“仅构建活动体系结构”,但未在发布配置中检查。因此,当您在64位上编译Debug时,不会构建32位版本,因此没有警告。

答案 2 :(得分:0)

这里的问题是long是32位而不是64. long long是64位。

在Mac Pro上运行10.6

#include <stdio.h>
int main() {
    printf("%d.\n", sizeof(long));
    printf("%d.\n", sizeof(long long));

}

输出

4.
8.