Loose-Info.com

Last Update 2020/09/10


TOP - 各種テスト - gcc - ファイル名の拡張子によるコンパイラの動作 - c, cpp

ファイル名の拡張子が「.c」であるときのコンパイラの動作
または
ファイル名の拡張子が「.cpp (.cc, .cp, .cxx, .CPP, .c++, .C)」であるときのコンパイラの動作

実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1

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

その1

ファイル名の拡張子が「.c」で記述コードがC言語である場合の結果

sample_c.c
/* ファイル拡張子 : .c */ /* コード記述言語 : C */ #include <stdio.h> int main(void) { printf("ファイル拡張子 : .c\n"); printf("コード記述言語 : C\n"); return 0; }

コンパイル実行結果
$ gcc sample_c.c $ プリプロセスを含むコンパイル終了

実行結果
$ ./a.out ファイル拡張子 : .c コード記述言語 : C $

その2

ファイル名の拡張子が「.c」で記述コードがC++である場合の結果

sample_cpp.c
/* ファイル拡張子 : .c */ /* コード記述言語 : C++ */ #include <iostream> int main() { std::cout << "ファイル拡張子 : .c\n"; std::cout << "コード記述言語 : C++\n"; return 0; }

コンパイル実行結果
$ gcc sample_cpp.c sample_cpp.c:4:10: fatal error: iostream: No such file or directory #include <iostream> ^~~~~~~~~~ compilation terminated. $ 拡張子でC言語と判定されるため、エラー発生・停止

その3

ファイル名の拡張子が「.cpp」で記述コードがC++である場合の結果

sample_cpp.cpp
/* ファイル拡張子 : .c */ /* コード記述言語 : C++ */ #include <iostream> int main() { std::cout << "ファイル拡張子 : .cpp\n"; std::cout << "コード記述言語 : C++\n"; return 0; }

コンパイル実行結果
$ gcc sample_cpp.cpp -lstdc++ <--- ライブラリ指定が必要 $ プリプロセスを含むコンパイル終了

実行結果
$ ./a.out ファイル拡張子 : .cpp コード記述言語 : C++ $

その4

ファイル名の拡張子が「.cpp」で記述コードがC言語である場合の結果

sample_c.cpp
/* ファイル拡張子 : .cpp */ /* コード記述言語 : C */ #include <stdio.h> int main(void) { printf("ファイル拡張子 : .cpp\n"); printf("コード記述言語 : C\n"); return 0; }

コンパイル実行結果
$ gcc sample_c.cpp $ プリプロセスを含むコンパイル終了(コードに互換性がある場合)

実行結果
$ ./a.out ファイル拡張子 : .cpp コード記述言語 : C $