126

私は、C 以外の多くの言語をサポートするための前処理ディレクティブがたくさんあると思われるオープン ソース ライブラリを使用しています。ライブラリが何をしているかを調べることができるように、前処理後にコンパイルしている C コードを確認したいと思います。 、私が書くものにもっと似ています。

gcc (または Linux で一般的に利用可能なその他のツール) はこのライブラリを読み取ることができますが、前処理が何にでも変換され、人間が読める C コードを出力できますか?

4

6 に答える 6

220

はい。オプションを gcc に渡し-Eます。これにより、前処理されたソース コードが出力されます。

于 2011-02-04T17:19:56.797 に答える
76

cppプリプロセッサです。

を実行cpp filename.cして、前処理されたコードを出力するか、 cpp filename.c > filename.preprocessed.

于 2011-02-04T17:19:51.293 に答える
3

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;
}
于 2019-06-13T13:09:59.217 に答える