Loose-Info.com
Last Update 2022/11/27
TOP - 各種テスト - gcc - ファイル名の拡張子によるコンパイラの動作 - i

ファイル名の拡張子が「.i」であるときのコンパイラの動作

テスト概要

その1
指定した拡張子「.i」のファイルがプリプロセスの実行が必要なソースコードである場合
FAIL プリプロセッサ記述部分でエラーが発生・停止

その2
指定した拡張子「.i」のファイルがプリプロセスの実行を必要としないソースコードである場合
PASS プリプロセス無しでコンパイルを終了(正常終了)

その3
拡張子「.i」と「.c」のファイルに対するコンパイル内容の比較
・sample_c_2.i 既にプリプロセスを実行済みのファイル
・sample_c_2_i.c sample_c_2.iの拡張子を「.c」に変更したファイル

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


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

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

その1

指定した拡張子「.i」のファイルがプリプロセスの実行が必要なソースコードである場合

sample_c_1.i
記述コードはC言語でプリプロセッサ命令を含む
拡張子は「.c」
/* 拡張子「.i」の場合の動作確認用ソースファイル */ #include <stdio.h> /* プリプロセッサ命令 */ int main(void) { printf("拡張子「.i」の場合の動作確認用ソースファイル\n"); return 0; }

コンパイル実行結果
$ gcc sample_c_1.i sample_c_1.i:3:1: error: stray ‘#’ in program #include <stdio.h> /* プリプロセッサ命令 */ ^ sample_c_1.i:3:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token #include <stdio.h> /* プリプロセッサ命令 */ ^ $ プリプロセッサ記述部分でエラーが発生・停止

その2

指定した拡張子「.i」のファイルがプリプロセスの実行を必要としないソースコードである場合

sample_c_2.i
既にプリプロセスを実行済みのコードを拡張子「.i」で保存
# 1 "sample_c_2.c" # 1 "<built-in>" # 1 "<command-line>" # 31 "<command-line>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 32 "<command-line>" 2 # 1 "sample_c_2.c" # 1 "/usr/include/stdio.h" 1 3 4 # 27 "/usr/include/stdio.h" 3 4 # 1 "/usr/include/bits/libc-header-start.h" 1 3 4 # 33 "/usr/include/bits/libc-header-start.h" 3 4 # 1 "/usr/include/features.h" 1 3 4 # 428 "/usr/include/features.h" 3 4 # 1 "/usr/include/sys/cdefs.h" 1 3 4 # 442 "/usr/include/sys/cdefs.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 443 "/usr/include/sys/cdefs.h" 2 3 4 extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); # 864 "/usr/include/stdio.h" 3 4 extern int __uflow (FILE *); extern int __overflow (FILE *, int); # 879 "/usr/include/stdio.h" 3 4 # 4 "sample_c_2.c" 2 # 5 "sample_c_2.c" int main(void) { printf("拡張子「.i」の場合の動作確認用ソースファイル\n"); return 0; }

コンパイル実行結果
$ gcc sample_c_2.i $ プリプロセスを実行せずコンパイルを終了(正常終了)

実行結果
$ ./a.out 拡張子「.i」の場合の動作確認用ソースファイル $

その3

拡張子「.i」と「.c」のファイルに対するコンパイル内容の比較

sample_c_2.i
既にプリプロセスを実行済みのコードを拡張子「.i」で保存
# 1 "sample_c_2.c" # 1 "<built-in>" # 1 "<command-line>" # 31 "<command-line>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 32 "<command-line>" 2 # 1 "sample_c_2.c" # 1 "/usr/include/stdio.h" 1 3 4 # 27 "/usr/include/stdio.h" 3 4 # 1 "/usr/include/bits/libc-header-start.h" 1 3 4 # 33 "/usr/include/bits/libc-header-start.h" 3 4 # 1 "/usr/include/features.h" 1 3 4 # 428 "/usr/include/features.h" 3 4 # 1 "/usr/include/sys/cdefs.h" 1 3 4 # 442 "/usr/include/sys/cdefs.h" 3 4 # 1 "/usr/include/bits/wordsize.h" 1 3 4 # 443 "/usr/include/sys/cdefs.h" 2 3 4 extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); # 864 "/usr/include/stdio.h" 3 4 extern int __uflow (FILE *); extern int __overflow (FILE *, int); # 879 "/usr/include/stdio.h" 3 4 # 4 "sample_c_2.c" 2 # 5 "sample_c_2.c" int main(void) { printf("拡張子「.i」の場合の動作確認用ソースファイル\n"); return 0; }

コンパイル実行結果
sample_c_2.i
$ gcc -v sample_c_2.i Using built-in specs. COLLECT_GCC=gcc COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64' /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -fpreprocessed sample_c_2.i -quiet -dumpbase sample_c_2.i -mtune=generic -march=x86-64 -auxbase sample_c_2 -version -o /tmp/cczSwNYx.s GNU C17 (GCC) version 8.2.0 (x86_64-pc-linux-gnu) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C17 (GCC) version 8.2.0 (x86_64-pc-linux-gnu) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 84637943c330ccfe91c8483610cbfda9 COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64' as -v --64 -o /tmp/ccZrCifr.o /tmp/cczSwNYx.s GNU assembler version 2.31.1 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.31.1 $ コンパイル終了

コンパイル実行結果
sample_c_2_i.c
sample_c_2.iの拡張子を「.c」に変更したファイル
$ gcc -v sample_c_2_i.c Using built-in specs. COLLECT_GCC=gcc COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64' /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v sample_c_2_i.c -quiet -dumpbase sample_c_2_i.c -mtune=generic -march=x86-64 -auxbase sample_c_2_i -version -o /tmp/ccVwxwUc.s GNU C17 (GCC) version 8.2.0 (x86_64-pc-linux-gnu) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../x86_64-pc-linux-gnu/include" #include "..." search starts here: <--- プリプロセス関連の出力と思われる部分(ここから) #include <...> search starts here: /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include /usr/local/include /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include-fixed /usr/include End of search list. <--- プリプロセス関連の出力と思われる部分(ここまで) GNU C17 (GCC) version 8.2.0 (x86_64-pc-linux-gnu) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 84637943c330ccfe91c8483610cbfda9 COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64' as -v --64 -o /tmp/ccKRMGVP.o /tmp/ccVwxwUc.s GNU assembler version 2.31.1 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.31.1 $ コンパイル終了