Loose-Info.com
Last Update 2022/11/28
TOP - 各種テスト - gcc - -Eオプション

-Eオプション
プリプロセス実行後に停止

テスト概要

-Eオプションを使用したプリプロセス済みのコードの生成
生成したプリプロセス済みコードを保存したファイルのコンパイルを実行し、アセンブラファイルを出力

実行環境

GCC-8.2.0
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