_POSIX_SOURCE
定义了之后, 才可以使用fdopen, 否则该函数的原型未定义
_SVID_SOURCE定义了之后才可以include ipc.h
_POSIX_C_SOURCE 定义为 199309 才可以使用 nanosleep
定义 _BSD_SOURCE , 才能使用strdup
这些是在使用 -std=c99 -Wall 时会出现的bug
另外, 通过一些软件包的 *-config -cflags这种方式来编译时. 一部分编译选项的控制权就交给了这些软件, 如
net-snmp-config --cflags
的输出为
-DINET6 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -g -lcrypto -DNETSNMP_NO_INLINE -Dlinux -I/usr/include/rpm -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE -I. -I/usr/include/net-snmp
内容之多, 会半会让人忽略它, 只要它不引起问题, 但里面有一项是
-Wdeclaration-after-statement
这可是一个不讨人喜欢的选项, 即使我在前面已经指定了-std=c99, 因为该选项出现在后面的缘故, 仍然会对混杂在代码中间的变量声明发出警告. 而这已经是C99 和C++都明确支持且提倡的用法.
阅读(763) | 评论(0) | 转发(0) |