Loose-Info.com

Last Update 2021/01/13


TOP - 各種テスト - gcc - -aux-infoオプション

-aux-info ファイル
翻訳単位内で宣言・定義された全ての関数のプロトタイプ宣言をファイルに出力

テスト概要

サンプルファイルの関数宣言を、プロトタイプ宣言リストファイルに出力して内容を確認

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


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

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

使用ファイル


sample.h
/* -aux-info オプション動作確認用ヘッダファイル */ #ifndef SAMPLE_H #define SAMPLE_H #define TEST_FLG 1 struct Samp { int nsamp1; int nsamp2; }; /* 関数プロトタイプによる宣言 */ int sampFunc1(struct Samp s); /* 関数名のみによる関数宣言 */ int sampFunc2(); /* 関数プロトタイプによる宣言 */ int sampFunc3(struct Samp s); #endif /* SAMPLE_H */

sample.c
/* -aux-info オプション動作確認用ソースファイル sample.c */ #include "sample.h" /* 記憶域クラスをstaticとして定義 */ static int sampFuncs(struct Samp s, int n) { return s.nsamp1 + s.nsamp2 + n; } /* ヘッダファイルで関数プロトタイプにより宣言 */ int sampFunc1(struct Samp s) { return s.nsamp1 + s.nsamp2 + TEST_FLG; } /* ヘッダファイルで関数名のみによる関数宣言 */ int sampFunc2(struct Samp s) { return s.nsamp1 + s.nsamp2 + sampFuncs(s, TEST_FLG);; } /* ヘッダファイルでの宣言なし */ int sampFunci(struct Samp s) { return s.nsamp1 + s.nsamp2 + 3; } /* ヘッダファイルで関数プロトタイプにより宣言 */ int sampFunc3(struct Samp s) { return s.nsamp1 + s.nsamp2 + sampFunci(s);; }

main.c
/* -aux-info オプション動作確認用ソースファイル main.c */ #include "sample.h" #include <stdio.h> int main(void) { struct Samp smp; smp.nsamp1 = 1; smp.nsamp2 = 2; int n1 = sampFunc1(smp); int n2 = sampFunc2(smp); int n3 = sampFunc3(smp); int ni = sampFunci(smp); printf("n1 = %d\n", n1); printf("n2 = %d\n", n2); printf("n3 = %d\n", n3); printf("ni = %d\n", ni); printf("TEST_FLG = %d\n", TEST_FLG); return 0; }

動作テスト


main.cのコンパイル
$ gcc -v -c -aux-info main.prot main.c Using built-in specs. /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -aux-info main.prot ... main.c: In function ‘main’: main.c:15:11: warning: implicit declaration of function ‘sampFunci’; did you mean ‘sampFunc3’? [-Wimplicit-function-declaration] int ni = sampFunci(smp); <--- 暗黙宣言に関する警告 ^~~~~~~~~ sampFunc3 as -v --64 -o main.o /tmp/ccQUPnK4.s COLLECT_GCC_OPTIONS='-v' '-c' '-aux-info' 'main.prot' '-mtune=generic' '-march=x86-64' $

生成されたプロトタイプ宣言リスト(main.prot)
行頭コメント ---> /* ファイル名:行:宣言の内容を表す記号 */
記号1文字目    I : 暗黙宣言    N : プロトタイプ    O : 非プロトタイプ
記号2文字目    C : 宣言    F : 定義
行末コメント ---> /* K&Rスタイルの引数リスト */ (定義の場合のみ)
/* compiled from: . */ /* sample.h:15:NC */ extern int sampFunc1 (struct Samp); /* sample.h:18:OC */ extern int sampFunc2 (/* ??? */); /* sample.h:21:NC */ extern int sampFunc3 (struct Samp); /* /usr/include/stdio.h:146:NC */ extern int remove (const char *); この間stdio.hに関するプロトタイプ宣言 /* /usr/include/stdio.h:865:NC */ extern int __overflow (FILE *, int); /* main.c:6:NF */ extern int main (void); /* () */ /* main.c:15:IC */ extern int sampFunci (/* ??? */);

sample.cのコンパイル
$ gcc -v -c -aux-info sample.prot sample.c Using built-in specs. /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v sample.c ... -aux-info sample.prot ... as -v --64 -o sample.o /tmp/ccv0aRiJ.s COLLECT_GCC_OPTIONS='-v' '-c' '-aux-info' 'sample.prot' '-mtune=generic' '-march=x86-64' $

生成されたプロトタイプ宣言リスト(main.prot)
行頭コメント ---> /* ファイル名:行:宣言の内容を表す記号 */
記号1文字目    I : 暗黙宣言    N : プロトタイプ    O : 非プロトタイプ
記号2文字目    C : 宣言    F : 定義
行末コメント ---> /* K&Rスタイルの引数リスト */ (定義の場合のみ)
/* compiled from: . */ /* sample.h:15:NC */ extern int sampFunc1 (struct Samp); /* sample.h:18:OC */ extern int sampFunc2 (/* ??? */); /* sample.h:21:NC */ extern int sampFunc3 (struct Samp); /* sample.c:6:NF */ static int sampFuncs (struct Samp s, int n); /* (s, n) struct Samp s; int n; */ /* sample.c:12:NF */ extern int sampFunc1 (struct Samp s); /* (s) struct Samp s; */ /* sample.c:18:NF */ extern int sampFunc2 (struct Samp s); /* (s) struct Samp s; */ /* sample.c:24:NF */ extern int sampFunci (struct Samp s); /* (s) struct Samp s; */ /* sample.c:30:NF */ extern int sampFunc3 (struct Samp s); /* (s) struct Samp s; */