Last Update 2021/11/30
-U マクロ名
ビルトインまたは-Dオプションで定義されたマクロ(マクロ名)を取り消す
テスト概要
ビルトインされているマクロに対する-Uオプションの効果
-Dオプションを使用して定義されたマクロに対する-Uオプションの効果
ソースコード内で定義されたマクロに対する-Uオプションの効果
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
ビルトインされているマクロに対する-Uオプションの効果
sample1.c
#include <stdio.h>
int main(void)
{
#ifdef __GNUC__
printf("__GNUC__ = %d\n", __GNUC__);
#else
printf("__GNUC__は未定義\n");
#endif
return 0;
}
オプション無しでコンパイル実行
$ gcc sample1.c
$ ./a.out
__GNUC__ = 8
$ マクロ「__GNUC__」は定義済みとなっている
-Uオプションでマクロ名を指定してコンパイル実行
$ gcc -U __GNUC__ sample1.c
$ ./a.out
__GNUC__は未定義
$ マクロ「__GNUC__」は取り消され未定義となる
-Dオプションを使用して定義されたマクロに対する-Uオプションの効果
sample2.c
#include <stdio.h>
int main(void)
{
#ifdef SAMPLE
printf("SAMPLE = %d\n", SAMPLE);
#else
printf("SAMPLEは未定義\n");
#endif
return 0;
}
-Dオプションを使用しマクロ「SAMPLE」を定義してコンパイルを実行
$ gcc -D SAMPLE sample2.c
$ ./a.out
SAMPLE = 1
$ マクロ「SAMPLE」は-Dオプションにより定義される
-Dオプションに続けて-Uオプションでマクロ名「SAMPLE」を指定してコンパイルを実行
$ gcc -D SAMPLE -U SAMPLE sample2.c
$ ./a.out
SAMPLEは未定義
$ マクロ「SAMPLE」は取り消され未定義となる
ソースコード内で定義されたマクロに対する-Uオプションの効果
sample3.c
#include <stdio.h>
#define SAMPLE 1
int main(void)
{
#ifdef SAMPLE
printf("SAMPLE = %d\n", SAMPLE);
#else
printf("SAMPLEは未定義\n");
#endif
return 0;
}
オプション無しでコンパイルを実行
$ gcc sample3.c
$ ./a.out
SAMPLE = 1
$ マクロ「SAMPLE」はソースコード内で定義
-Uオプションでマクロ名「SAMPLE」を指定してコンパイルを実行
$ gcc -U SAMPLE sample3.c
$ ./a.out
SAMPLE = 1
$ -Uオプションでの取り消し指定は効果無し