0

在下面的程序中,我对该语句进行了注释,希望在使用和#include <ctype.h>之类的函数时会引发错误。但令我惊讶的是,没有抛出任何错误。为什么会这样?维基百科页面在标题类型中列出了这些函数。isupperisgraphctype.h

#include <stdio.h>
//#include <ctype.h>

int main() {
char ch;
for(;;) {
   ch = getc(stdin);
   if( ch == '.') break;
   int g = isgraph(ch);
   if(isupper(ch) != 0) printf("Is in upper case\n");
}   
return 0;   
 }

注意:gcc用于在 linux (fedora) 上编译。

4

1 回答 1

3

默认情况下,gcc以相当宽松的模式运行。您可以通过添加来获得警告,例如:

 gcc -Wall -c yourfile.c

要求所有主要警告。(有更多的警告可以作为:-Wextra添加一堆。)您还可以指定-std=c99(并且可能-pedantic)以获得更多警告。

C99 要求在使用函数之前定义或声明函数。

$ gcc -O3 -g -std=c99 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition -c warn.c
warn.c:4:5: warning: function declaration isn’t a prototype [-Wstrict-prototypes]
warn.c: In function ‘main’:
warn.c:4:5: warning: old-style function definition [-Wold-style-definition]
warn.c:9:4: warning: implicit declaration of function ‘isgraph’ [-Wimplicit-function-declaration]
warn.c:10:4: warning: implicit declaration of function ‘isupper’ [-Wimplicit-function-declaration]
warn.c:9:8: warning: unused variable ‘g’ [-Wunused-variable]
$

这是 GCC 4.7.1(在 Mac OS X 10.7.5 上)的输出,带有我使用的标准编译选项集——在你的源代码上运行,存储在一个文件中warn.c

于 2012-11-02T04:02:25.237 回答