Last Update 2022/11/27
ファイル名の拡張子が「.i」であるときのコンパイラの動作
テスト概要
指定した拡張子「.i」のファイルがプリプロセスの実行が必要なソースコードである場合
FAIL
プリプロセッサ記述部分でエラーが発生・停止
指定した拡張子「.i」のファイルがプリプロセスの実行を必要としないソースコードである場合
PASS
プリプロセス無しでコンパイルを終了(正常終了)
拡張子「.i」と「.c」のファイルに対するコンパイル内容の比較
・sample_c_2.i 既にプリプロセスを実行済みのファイル
・sample_c_2_i.c sample_c_2.iの拡張子を「.c」に変更したファイル
・sample_c_2_i.c sample_c_2.iの拡張子を「.c」に変更したファイル
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
指定した拡張子「.i」のファイルがプリプロセスの実行が必要なソースコードである場合
sample_c_1.i
記述コードはC言語でプリプロセッサ命令を含む
拡張子は「.c」
記述コードは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> /* プリプロセッサ命令 */
^
$ プリプロセッサ記述部分でエラーが発生・停止
指定した拡張子「.i」のファイルがプリプロセスの実行を必要としないソースコードである場合
sample_c_2.i
既にプリプロセスを実行済みのコードを拡張子「.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」の場合の動作確認用ソースファイル
$
拡張子「.i」と「.c」のファイルに対するコンパイル内容の比較
sample_c_2.i
既にプリプロセスを実行済みのコードを拡張子「.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
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」に変更したファイル
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
︙
$ コンパイル終了