Loose-Info.com
Last Update 2021/11/30
TOP - 各種テスト - gcc - -U オプション

-U マクロ名
ビルトインまたは-Dオプションで定義されたマクロ(マクロ名)を取り消す

テスト概要

その1
ビルトインされているマクロに対する-Uオプションの効果

その2
-Dオプションを使用して定義されたマクロに対する-Uオプションの効果

その3
ソースコード内で定義されたマクロに対する-Uオプションの効果

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

その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__」は取り消され未定義となる

その2

-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」は取り消され未定義となる

その3

ソースコード内で定義されたマクロに対する-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オプションでの取り消し指定は効果無し