2009/10/01

Wall != 壁(wall) Wall == Warning ALL

私は普段、Ecolinux-ez上でソースコード(と、いってもソースコードが百行にも満たないようなものがほとんど、というかそんなものしか書けない)を本当に簡単なもの(Hello,world!くらい)はVim、普通はgeanyを使って書いてるのですが、そのgeanyのC言語のコンパイルのコマンドのオプションをデフォルトのgcc -o hoge -Wall hoge.c、といった感じのものに、さらに-Wオプションをつけた。これでより警告を吐いてくれるようになった。

例えば以下は具体例。ユーザー名は隠して*****。
*****@Gushnasaph:~$ gcc --version
gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

*****@Gushnasaph:~$ cat op-test.c
#include<stdio.h>

int main(int argc,char **argv)
{

        int a,b,c,d;

        if(a >= b >= c) printf("a >= b >= c\n");
        if(a = b);

        printf("Hello,world!\n");
        return 0;
}
*****@Gushnasaph:~$ gcc -W op-test.c
op-test.c: In function ‘main’:
op-test.c:9: 警告: empty body in an if-statement
*****@Gushnasaph:~$ gcc -Wall op-test.c
op-test.c: In function ‘main’:
op-test.c:8: 警告: X<=Y<=Z の様な比較は数学的な意味での結果をもたらしません
op-test.c:9: 警告: 真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします
op-test.c:6: 警告: unused variable ‘d’
*****@Gushnasaph:~$ gcc -W -Wall op-test.c
op-test.c: In function ‘main’:
op-test.c:8: 警告: X<=Y<=Z の様な比較は数学的な意味での結果をもたらしません
op-test.c:9: 警告: 真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします
op-test.c:9: 警告: empty body in an if-statement
op-test.c:6: 警告: unused variable ‘d’
op-test.c: トップレベル:
op-test.c:3: 警告: unused parameter ‘argc’
op-test.c:3: 警告: unused parameter ‘argv’
*****@Gushnasaph:~$ gcc -w -Wall op-test.c
*****@Gushnasaph:~$ gcc op-test.c
*****@Gushnasaph:~$
とっても適当に書いてやってみた。
例えば-Wを追加した事により"argc,argvが使われてねえぞ(#゚Д゚)ゴルァ!!"てなことを言ってくれている。

-Wallって全然allじゃない。
ちなみに最後の-wは-WのWを大文字でなく小文字にしてしまい、-wとすると警告を吐かなくなってしまうということ。
詳しくはman gccでもやって確認してくださいな。

0 件のコメント: