Loose-Info.com
Last Update 2022/11/26
TOP - 各種テスト - gcc - ファイル名の拡張子によるコンパイラの動作 - c, cpp

プリプロセスを必要とし、
ファイル名の拡張子が「.c」であるときのコンパイラの動作
または
ファイル名の拡張子が「.cpp (.cc, .cp, .cxx, .CPP, .c++, .C)」であるときのコンパイラの動作
に関するテスト

テスト概要

その1
プリプロセッサ命令を含み、ファイル名の拡張子が「.c」で記述コードがC言語である場合のコンパイル結果
PASS コンパイル終了・実行ファイル生成

その2
プリプロセッサ命令を含み、ファイル名の拡張子が「.c」で記述コードがC++である場合の結果
FAIL 拡張子でC言語と判定されるため、エラー発生・停止

その3
プリプロセッサ命令を含み、ファイル名の拡張子が「.cpp」で記述コードがC++である場合の結果
PASS コンパイル終了・実行ファイル生成

その4
プリプロセッサ命令を含み、ファイル名の拡張子が「.cpp」で記述コードがC言語である場合の結果(コードに互換性がある場合)
PASS コンパイル終了・実行ファイル生成

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

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

その1

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

sample_c.c
記述コードは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」
/* ファイル拡張子 : .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++でプリプロセッサ命令を含む
拡張子は「.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
記述コードは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 $