【发布时间】:2013-05-28 10:30:26
【问题描述】:
我开始使用 Zed Shaw 的 Learn C The Hard Way。我已经下载了 XCode 和命令行工具。但是当我编译第一个程序时:
int main(int argc, char *argv[]) {
puts("Hello world.");
return 0;
}
我收到此警告:
ex1.c:2:1:警告:函数“puts”的隐式声明无效 在 C99 中 [-Wimplicit-function-declaration]
程序确实编译并正确执行。
我使用的是 OSX 10.8.3。输入'gcc -v' 给出:
使用内置规范。目标:i686-apple-darwin11 配置: /private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/src/configure --disable-checking --enable-werror --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc, c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/ lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1线程模型:posix gcc 版本 4.2.1(基于 Apple Inc. build 5658)(LLVM build 2336.11.00)
请帮忙。
【问题讨论】:
-
在未使用参数时使用
int main(int argc, char *argv[])有点愚蠢;它应该是int main(void)甚至是int main()。但是,这可能是另一天的辩论。我注意到 GCC 5.x 使用 C11 (-std=gnu11) 作为默认编译模式。clang(伪装成gcc)使用C99。 C99 和 C11 都要求在使用之前声明所有函数(main()除外)。