最近对以前写的代码进行消除编译警告,但是有一个isblank的警告一直无法消去。
例子源码如下:
编译的结果:
bash-2.05b# gcc -Wall test.c test.c: In function `main': test.c:9: warning: implicit declaration of function `isblank'
这个警告是说isblank没有对应的函数声明,需要包含相应的头文件。
通过man isblank,所显示的信息来看,对应的头文件就是ctype.h,但还是不行呀。
后来发现,在比较新的Linux发行版中编译时则没有这个警告,只有在比较旧的版本中才有。
再仔细看了一下man isblank,偶然间瞥到man信息中的一段信息:
isascii():
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE
isblank(): _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L; or cc -std=c99
一下就清楚了,isblank属于C99标准,这点通过查看ctype.h可以获得证明:
添加编译选项-std=c99,重新编译了一下,警告终于消除了:
bash-2.05b# gcc -Wall -std=c99 test.c
虽然编译警告解决了,但有一个疑问,gcc不完全支持C99标准吗? 这个等以后再学习了。