● -Wunused-macros
このオプションを使うと,ソース中に使用していないマクロがあった場合に警告します(リスト1).
〔リスト1〕マクロが未使用の場合警告する例(test165.c)
|
/*
*使用していないマクロに警告する
*/
#include <stdio.h>
#define max(a,b) ((a) >? (b))
int main(void)
{
long b;
printf("test165\n");
return 0;
}
|
|
コンパイルの結果を以下に示します.
$gcc -Wunused-macros test165.c
test165.c:5:1: 警告: macro"max"is not used
$gcc test165.c
$
● -Wendif-labels
このオプションを使うと,プリプロセッサ文中の意味のないテキストに警告します(リスト2).
〔リスト2〕プリプロセッサ文中の意味のないテキストに警告する例 (test166.c)
|
/*
*else,endifの後のテキストに警告する
*/
#include <stdio.h>
#if TEST166
long a1 =0;
#else TEST166
long a1 =1000;
#endif TEST166
#if TEST166a
long a2 =0;
#else
long a2 =1000;
#endif
int main(void)
{
long b;
printf("test166\n");
return 0;
}
|
|
コンパイルの結果を次に示します.
$gcc-Wendif-labels test166.c
test166.c:7:7: 警告:
余分なトークンが #elseディレクティブの終りにあります
test166.c:9:8: 警告:
余分なトークンが#endifディレクティブの終りにあります
$
なお,このオプションはデフォルトで使われます.
$gcc test166.c
test166.c:7:7: 警告:
余分なトークンが #elseディレクティブの終りにあります
test166.c:9:8: 警告:
余分なトークンが#endifディレクティブの終りにあります
$
● -CC
マクロを展開する際に,コメントをマクロ展開リストに出力するか否か指定します(リスト3).
〔リスト3〕マクロ展開リスト中のコメントを有効にする例 (test167.c)
|
/*
*マクロ中のコメントを有効にする
*/
#include <stdio.h>
#if TEST167
long a1 =0; //test
#else
long a1 =1000; //コメント
long b1 =1000; /*test*/
#endif
int main(void)
{
long b;
printf("test167\n");
return 0;
}
|
|
コンパイル(マクロ展開)の結果を以下に示します.
$gcc -CC -E test167.c|grep [ab]1
long a1=1000; //コメント
long b1=1000; /*test*/
$gcc -E test167.c|grep [ab]1
long a1=1000;
long b1=1000;
$
オプション-Eは,前処理のリストを標準出力に出力するものです.-CC単独では何もしません.
● -###
-vオプションと同様にバージョンを表示します.
● -x language
いくつかの言語を混在させてコンパイルを行う際に,次の-xオプションまでlanguageとして扱うオプションです.しかし*.cや*.sと接尾語でそのソースが何かを確定させるほうが効率的です.
● -x none
このオプションを指定すると,-x languageで指定した言語を無視し,接尾語で確定した言語として扱います.
● -pass-exit-codes
通常はgccコマンドでコンパイル・リンク中にエラーコード1を戻したところで終了してしまいます.このオプションを指定すると,最後まで実行します.ただしコンパイル・リンクエラーより,もっと重要な異常が起きた場合には終了してしまいます.
● -Dマクロ名
このオプションに続いてマクロ名を指定すると,それは1と定義されます(リスト4).
〔リスト4〕-Dオプションの例(test174.c)
|
/*
*-Dオプションの例
*/
#include <stdio.h>
int main(void)
{
#if dbg
printf("デバッグ中\n");
#else
printf("βテスト中\n");
#endif
return 0;
}
|
|
コンパイルと実行の結果を以下に示します.
$gcc test174.c -o test174
$ ./test174
βテスト中
$gcc -D dbg test174.c -o test174
$ ./test174
デバッグ中
$
2回目のコンパイル・実行ではdbgが1と定義されたため“デバッグ中”と出力するコードをコンパイルしました.
● -Dマクロ名=値
このオプションでマクロに値を設定できます(リスト5).
〔リスト5〕-Dオプションでマクロに値を設定する例(test175.c)
|
/*
*Uオプションでマクロを設定する例
*/
#include <stdio.h>
int main(void)
{
printf("macro_01の値は%d\n",macro_01);
printf("macro_02の値は%d\n",macro_02);
return 0;
}
|
|
コンパイルと実行の結果を以下に示します.
$gcc -D macro_01="58548" -D macro_02
=“152635” test175.c -o test175
$ ./test175
macro_01の値は58548
macro_02の値は152635
$
● -Uマクロ名
通常は__GNUC__という名前がspecsによって初期設定されています.これはGCCのメジャーバージョンなので,この環境では3です.これを-U __GNUC__とオプションで指定した場合,__GNUC__の定義が無効になります(リスト6).
〔リスト6〕Uオプションでマクロ設定を取り消す例(test176.c)
|
/*
*Uオプションでマクロ設定を取り消す例
*/
#include <stdio.h>
int main(void)
{
#if __GNUC__
printf("__GNUC__は有効\n");
#else
printf("__GNUC__は無効\n");
#endif
return 0;
}
|
|
コンパイルと実行の結果を以下に示します.
$gcc -U __GNUC__ test176.c -o test176
$ ./test176
__GNUC__は無効
$gcc test176.c -o test176
$ ./test176
__GNUC__は有効
$
● -A predicate=answer
このオプションはプログラム中の条件に値を与えることができます.条件コンパイルなどに使用することができます(リスト7).
〔リストリスト7〕-Aオプションでpredicateとanswerを設定する例(test177.c)
|
/*
*-Aオプションでpredicate と answerを設定する例
*/
#include <stdio.h>
int main(void)
{
#if #pre (test)
printf("predicate test \n");
#else
printf("predicate answerは定義されていません\n");
#endif
return 0;
}
|
|
コンパイルと実行の結果を以下に示します.
$gcc -A predicate=test test178.c -o test177
$ ./test177
predicate test
$gcc test177.c -o test177
$ ./test177
predicate answerは定義されていません
$
● -A-predicate=answer
上で説明したオプションの逆の意味をもちます.プログラム中の条件の値を取り消します.これはspecsファイルなどに初期設定されているものを解除するときなどに使います.
以上のプリプロセッサ関連(全般にかかわるオプション)のまとめを表3に示します.
〔表3〕プリプロセッサ関連(全般にかかわるオプション)のまとめ
|
|
|