Cでは、ステートメントの終了を示すためにセミコロン(;
)が使用されています。なぜ#include
行はセミコロンを必要としませんか?なぜ#includeディレクティブにステートメントの最後にセミコロンがないのですか?
答えて
#include
(そして、#
で始まる他のすべての行は、#define
のようになります)は、preprocessorの一部です。これは実際には、メインコンパイラの前に実行される別のプログラムで、のようなものには、ソースとマクロの展開にファイルが含まれています。
答えに感謝します:) –
"これは実際には別のプログラムです" - GCCを使用している場合はそれです。 MSVCを使用している場合はそうではありません。重要な点は、前処理は、メインコンパイル段階の前に発生するフェーズとして標準で定義されており、セミコロンを含まない独自の定義済み構文があることです。翻訳段階をプログラムに編成する方法は、実装までは全く異なります。 –
#include
はプリプロセッサで処理され、コンパイラはこれらの文を認識しません。したがって、文の最後に;
は必要ありません。
#include "whatever.h"
これは、ソースファイルのその行を "whatever.h"に置き換えただけです。したがって、 "whatever.h"の最後に;
を置く必要はありません。プリプロセッサは警告を出し、無視します。
「プリプロセッサはあなたに警告を与え、あなたの答えの中のステートメントを無視しますか? –
私はその考え方は 'あなたが '#include" whatever.h ";'を書くと、プリプロセッサは警告を出し、セミコロンを無視するということです。 –
#を見たトークンを読んでいる間に、その後にキーワード(include、define、pragmaなど)を探します。特にインクルードの場合、次のトークンの後ろに<または一重引用符( ")とファイル名、それに対応する終了トークン>または(")が続きます。その後の次の文字は改行と見なされます。そうでなければ、それは理解できなかった余分なトークンに対して警告を出します。 @JonathanLefflerは「無視する」と述べたので、ヘッダーファイル用ではありません。 –
前処理ディレクティブはステートメントではないためです。
すべての文で最終的に;
が必要なわけではありません。例えば:1つのif
の文と1つの空の複合文:
int bla = 1;
if (bla) {
}
bla
の宣言の後、私たちは二つの文を持っています。 ;
はありませんが、プログラムは有効です。
ディレクティブはプリプロセッサによって処理されます。コンパイラではなく、単純なテキスト置換プロセッサです。これは、空白として扱うCコンパイラとは異なり、行末を(\n)
を重要な文字として使用します。また、行の最後に\
がある理由も影響します。
私はこの行が何であるか把握できませんでした。また、行頭に\があるという理由も意味します。より具体的になりますか?ありがとう。 –
これはどのC言語の本でもよくカバーされています。 –
はい、私はK&Rです。 –
- 1. includeステートメントの最後にセミコロンを追加する必要がありますか?
- 2. このステートメントにセミコロンが必要なのはなぜですか?
- 3. マクロ呼び出しの後にセミコロンがないのはなぜですか?
- 4. ページ変更後にディレクティブが機能しないのはなぜですか? Angular
- 5. C/C++にセミコロンが必要なのはなぜですか?
- 6. ここにセミコロンが必要なのはなぜですか?
- 7. Prologがセミコロンの後で私のリストの最後の値を繰り返すのはなぜですか?
- 8. importステートメントにセミコロンが必要ですか?
- 9. ステートメントの最後にJavaがダブルセミコロンのエラーを表示しないのはなぜですか?
- 10. セミコロンがループ本体を空にしていないのはなぜですか?
- 11. Objective-Cがメソッド定義の最後にセミコロンを許可するのはなぜですか?
- 12. オブジェクトリテラルの割り当て後にセミコロンが挿入されないのはなぜですか?
- 13. doctrine 2.2は、includeステートメントやrequireステートメントなしで、-namespace-and -use-を使用するのはなぜですか?
- 14. 最後の3行と5行に2つのendステートメントが必要なのはなぜですか?
- 15. 変数がtrueのときにJavaScriptがDOMステートメントを最後に実行するのはなぜですか?
- 16. なぜPythonプログラムは最後に2回ステートメントを出力していますか?
- 17. なぜJSXの反応でセミコロンがエラーになるのですか?
- 18. なぜセミコロンが必要なのですか?
- 19. delegate.hファイルに#include <QItemDelegate>が存在しないのはなぜですか?
- 20. なぜ最初と最後に使用できないのですか?
- 21. MySQLワークベンチでセミコロンが見つからないのはなぜですか?
- 22. ng-showディレクティブが機能しないのはなぜですか?
- 23. C#で#include指令が不要なのはなぜですか?
- 24. gsl :: include includeステートメント
- 25. メソッド実装の最後にセミコロン
- 26. Function(Javascript)のif/else文の後にセミコロンがない?何がありますか?
- 27. ノード(javascript)にセミコロンがないとエラーが発生しないのはなぜですか?
- 28. なぜUITextViewでフレームの最後までカーソルが届かないのですか
- 29. なぜ、Postdelayedがifステートメントで動作しないのですか
- 30. #<Python.h>を#includeにしていないのはなぜですか?
これはCステートメントではないためです。これは、プリプロセッサへの指示(命令)です。 – wildplasser
そのCの設計方法とC++の設計方法 – Surya
@Surya:関連するコメントはありません回答を見ると思います –