我有以下代码:
#include <stdio.h>
int main() {
putc_unlocked('a', stdout);
return 0;
}
当我使用 gcc file.c
编译它时没有出现错误,但是,如果我使用 gcc -std=c11 file.c
,我得到:
file.c: In function ‘main’:
file.c:4:2: warning: implicit declaration of function ‘putc_unlocked’ [-Wimplicit-function-declaration]
putc_unlocked('a', stdout);
^
为什么?
使用 -std=cxx
进行编译,其中 xx 为 99 或 11,具体取决于您使用的 C 版本将使用与使用 -std=gnuxx
进行编译不同的头文件(这里又是 xx = 99 或 11)。
GCC 5.2 的默认设置(如果您未指定命令行参数)是 -std=gnu11
。
gnu 设置定义宏:
_GNU_SOURCE
,打开 GNU 独有的功能;
_POSIX_SOURCE
,打开 POSIX 功能;
- 也许还有其他人? (
_BSD_SOURCE
是一种可能性,但我不确定)。
如果您使用 -std=cxx
进行编译,那么您将获得标准 C 而不是任何扩展。
所以这个警告是因为那个函数不是 C 标准的一部分。因此,您获得了函数的隐式声明(这是旧 C 标准所允许的,并为向后兼容而保留)。
如果您想使用 -std=cxx
进行编译,您可以编辑您的文件以包含 #define _POSIX_SOURCE
。
我是一名优秀的程序员,十分优秀!