isblank编译警告

最近对以前写的代码进行消除编译警告,但是有一个isblank的警告一直无法消去。

 

例子源码如下:

 

#include <stdio.h> #include <ctype.h> int main() { char a = 'a'; printf("%d/n", isblank(a)); printf("%d/n", isalpha(a)); return 0; } 

 

编译的结果:

 

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可以获得证明:

/* ISO C99 introduced one new function. */ #ifdef __USE_ISOC99 __BEGIN_NAMESPACE_C99 __exctype (isblank); __END_NAMESPACE_C99 #endif 

 

添加编译选项-std=c99,重新编译了一下,警告终于消除了:

bash-2.05b# gcc -Wall -std=c99 test.c

 

 

虽然编译警告解决了,但有一个疑问,gcc不完全支持C99标准吗? 这个等以后再学习了。

 

你可能感兴趣的:(c,linux,function,gcc)