0

次のプログラムでは、や など#include <ctype.h>の関数を使用しているときにエラーがスローされることを期待して、ステートメントにコメントを付けました。しかし、驚いたことに、エラーはスローされません。これはなぜですか?ウィキペディアのページには、これらの関数が header type にリストされています。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

すべての主な警告を求めます。(他にも asl できる警告があります:-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 に答える