Last Update 2020/12/11
-std=gnu17
言語標準をgnu17としてコンパイル
テスト概要
-std=オプションに gnu90、gnu99、gnu11、gnu17 を設定してコンパイルを実行
各標準での__STDC_VERSION__の値を比較
各標準での__STDC_VERSION__の値を比較
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
使用ファイル
main.c
/* -std=gnu17 オプション動作確認用ソースファイル main.c */
#include <stdio.h>
int main(void)
{
long nver = __STDC_VERSION__;
printf("__STDC_VERSION__ = %ld\n", nver);
return 0;
}
-std=オプションに gnu90、gnu99、gnu11、gnu17 を設定してコンパイルを実行
各標準での__STDC_VERSION__の値を比較
各標準での__STDC_VERSION__の値を比較
$ gcc -v -std=gnu90 main.c <--- gnu90を設定してコンパイル
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v ... -std=gnu90 ...
︙
GNU C89 (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
main.c: In function ‘main’:
main.c:7:14: error: ‘__STDC_VERSION__’ undeclared (first use in this function); did you mean ‘__FLT_EPSILON__’?
long nver = __STDC_VERSION__; __STDC_VERSION__ の未定義エラー
^~~~~~~~~~~~~~~~
__FLT_EPSILON__
main.c:7:14: note: each undeclared identifier is reported only once for each function it appears in
エラー発生・コンパイル停止
$ gcc -v -std=gnu99 main.c <--- gnu99を設定してコンパイル
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -std=gnu99 ...
︙
as -v --64 -o /tmp/ccpQ6aJn.o /tmp/ccZPb9tf.s
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ...
COLLECT_GCC_OPTIONS='-v' '-std=gnu99' '-mtune=generic' '-march=x86-64'
$ ./a.out
__STDC_VERSION__ = 199901
$ gcc -v -std=gnu11 main.c <--- gnu11を設定してコンパイル
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -std=gnu11 ...
︙
as -v --64 -o /tmp/ccTCO9Cs.o /tmp/ccb7eNqd.s
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ...
COLLECT_GCC_OPTIONS='-v' '-std=gnu11' '-mtune=generic' '-march=x86-64'
$ ./a.out
__STDC_VERSION__ = 201112
$ gcc -v -std=gnu17 main.c <--- gnu17を設定してコンパイル
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -std=gnu17 ...
︙
as -v --64 -o /tmp/ccZZN13i.o /tmp/ccSF4Y4K.s
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ...
COLLECT_GCC_OPTIONS='-v' '-std=gnu17' '-mtune=generic' '-march=x86-64'
$ ./a.out
__STDC_VERSION__ = 201710
$