私は、C 以外の多くの言語をサポートするための前処理ディレクティブがたくさんあると思われるオープン ソース ライブラリを使用しています。ライブラリが何をしているかを調べることができるように、前処理後にコンパイルしている C コードを確認したいと思います。 、私が書くものにもっと似ています。
gcc (または Linux で一般的に利用可能なその他のツール) はこのライブラリを読み取ることができますが、前処理が何にでも変換され、人間が読める C コードを出力できますか?
私は、C 以外の多くの言語をサポートするための前処理ディレクティブがたくさんあると思われるオープン ソース ライブラリを使用しています。ライブラリが何をしているかを調べることができるように、前処理後にコンパイルしている C コードを確認したいと思います。 、私が書くものにもっと似ています。
gcc (または Linux で一般的に利用可能なその他のツール) はこのライブラリを読み取ることができますが、前処理が何にでも変換され、人間が読める C コードを出力できますか?
はい。オプションを gcc に渡し-E
ます。これにより、前処理されたソース コードが出力されます。
cpp
プリプロセッサです。
を実行cpp filename.c
して、前処理されたコードを出力するか、
cpp filename.c > filename.preprocessed
.
Message.cpp または .c ファイルとしてファイルがあるとします。
ステップ 1:前処理 (引数-E
)
g++ -E .\Message.cpp > P1
生成された P1 ファイルには、展開されたマクロとヘッダー ファイルの内容が含まれており、コメントが削除されています。
ステップ 2:前処理されたファイルをアセンブリに変換します (引数-S
)。このタスクはコンパイラによって行われます
g++ -S .\Message.cpp
アセンブラ(ASM)が生成されます(Message.s)。すべてのアセンブリ コードがあります。
手順 3:アセンブリ コードをオブジェクト コードに変換します。注: Message.s は Step2 で生成されました。
g++ -c .\Message.s
Message.o という名前のオブジェクト ファイルが生成されます。バイナリ形式です。
ステップ 4:オブジェクト ファイルのリンク。このタスクはリンカーによって実行されます
g++ .\Message.o -o MessageApp
exe ファイル MessageApp.exe がここに生成されます。
#include <iostream>
using namespace std;
//This a sample program
int main()
{
cout << "Hello" << endl;
cout << PQR(P,K) ;
getchar();
return 0;
}