私はコンパイルプロセスのさまざまな段階を読んでいました。私はリンクフェーズに達したとき、それはそれがexeファイルにするために1つに定義されたライブラリとユーザーのオブジェクトファイルをリンクすることがわかりました。しかし、前処理はすでに文#includeをその内容(すなわちprintfなどの関数の定義)に置き換えました。 私はどこかに間違っていることを知っていますが、間違って理解したことはありますか?リンクと前処理
Q
リンクと前処理
0
A
答えて
0
一般に、ライブラリヘッダーは関数を宣言し、定義しません。 .hファイルを見ると、(例を使用すると)何かが表示されます。
extern int printf (const char *fmt, ...) ;
多くの実装では、これらの宣言は、追加のマクロによって隠されているが
この宣言には、printfという関数があります。この関数は、ポイントを文字として引数にとり、そのあとに可変数の指定されていない引数を指定します。
これにより、コンパイラは、コード内のprintfの呼び出しが関数の呼び出しシーケンスとして宣言されているものと一致するかどうかを確認できます。
自分でprintfを書いてコードに含めるのでなければ、プログラムをコンパイルするときにprintfはありません。
リンカーは、リンカーを自動的に呼び出すようにコンパイラーを呼び出すと、リンカーは指定されたライブラリーを検索してprintfが含まれているものを探し、実行可能ファイルにコードを含めます(共有ライブラリ)。
+0
今私は理解した。以前は、ヘッダーファイルには、指定されたいくつかの関数を使用するためにstdio.hをインクルードしたときのように、すべての定義が含まれていると思いました。 –
関連する問題
- 1. CXFリクエストの前処理と後処理の処理
- 2. ダミー変数と前処理
- 3. 前処理
- 4. メッセージモジュール+プライベートメッセージ+リンクのリンクを処理する
- 5. クロールする前にscrapyのsitemapcrawlerが処理するリンク
- 6. C PF_PACKETリンク層処理
- 7. jqueryイベント処理のリンク
- 8. RapidMinerタイムスタンプ前処理
- 9. Python:前処理テキスト
- 10. Freemarker - テンプレート前処理
- 11. bwboundaries - 、MATLAB-、前処理
- 12. データ前処理Python
- 13. XSLアンエスケープ前処理
- 14. 前処理辞書
- 15. 前処理と翻訳の関係
- 16. インターセプトと前処理jQuery-uiオートコンプリートデータ
- 17. タイメレフ連結前処理:
- 18. Drupal 8前処理ページ
- 19. キャレットパッケージからの前処理
- 20. Androidでの前処理
- 21. CNNオブジェクトのローカライズ前処理?
- 22. Sparkカスタム前処理エスティメータ
- 23. zbarのバーコード前処理
- 24. Pythonルートの前処理ルートパラメータ
- 25. Javaの前処理フェーズ
- 26. Frama-c前処理エラー
- 27. 前処理多値機能?
- 28. マシンラーニングデータパンダによる前処理
- 29. 処理前のロギング例外
- 30. TFRecordsファイルの前処理テキストデータ
[コンパイル/リンク処理はどのように機能しますか?](http://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work) – niceman
ヘッダーファイルは作成できません。関数の定義、宣言のみを含みます。 – sepp2k