Last Update 2022/11/28
-Eオプション
プリプロセス実行後に停止
テスト概要
-Eオプションを使用したプリプロセス済みのコードの生成
生成したプリプロセス済みコードを保存したファイルのコンパイルを実行し、アセンブラファイルを出力
生成したプリプロセス済みコードを保存したファイルのコンパイルを実行し、アセンブラファイルを出力
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
使用ファイル
sample.c
/* -E オプション動作確認用ソースファイル */
#include <stdio.h>
int main(void)
{
printf("-E オプション動作確認用ソースファイル\n");
return 0;
}
-Eオプションを付加してコンパイルを実行
$ gcc -v -E sample.c > sample_e.txt <--- 出力されたプリプロセス実行済みのコードをファイルに出力
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -E -quiet -v sample.c -mtune=generic -march=x86-64
︙ ^^^ sample.cのコンパイル
COLLECT_GCC_OPTIONS='-v' '-E' '-mtune=generic' '-march=x86-64'
$
sample_e.txt(処理実行時の出力内容)
# 1 "sample.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"
︙
extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));
# 846 "/usr/include/stdio.h" 3 4
extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
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
# 5 "sample.c"
int main(void)
{
printf("-E オプション動作確認用ソースファイル\n");
return 0;
}
-Eオプションで出力されたsample_e.txtのコンパイルを実行
$ ls -l
total 20
-rw-r--r-- 1 ****** ******** 190 *** ** **:** sample.c
-rw-r--r-- 1 ****** ******** 15690 *** ** **:** sample_e.txt
$ gcc -v -S -x c sample_e.txt <--- -xオプションでCソースファイル指定でコンパイル
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v sample_e.txt ... -o sample_e.s
︙ ^^^ sample_e.txtのコンパイル
COLLECT_GCC_OPTIONS='-v' '-S' '-mtune=generic' '-march=x86-64'
$ ls -l
total 24
-rw-r--r-- 1 ****** ******** 190 *** ** **:** sample.c
-rw-r--r-- 1 ****** ******** 638 *** ** **:** sample_e.s <--- sample_e.txtから生成されたアセンブラファイル
-rw-r--r-- 1 ****** ******** 15690 *** ** **:** sample_e.txt
$
sample_e.s(生成されたアセンブラファイル)
.file "sample_e.txt"
.text
.section .rodata
.align 8
.LC0:
.string "-E \343\202\252\343\203\227\343\202\267\343\203\247\343\...\202\244\343\203\253"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $.LC0, %edi
call puts
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 8.2.0"
.section .note.GNU-stack,"",@progbits