簡體   English   中英

C++ 一行中的多個預處理器指令

[英]Multiple preprocessor directives on one line in C++

一個假設的問題:是否有可能將包含預處理器指令的 C++ 程序完全放在一行中?

這樣的一行看起來像這樣:

#define foo #ifdef foo #define bar #endif

這條線的語義是什么?

此外,是否存在不可能在一行中構建的指令組合?

如果這是特定於編譯器的,那么歡迎使用 VC++ 和 GCC 答案。

預處理指令必須以換行符結束,所以這實際上是一個單獨的預處理指令,它定義了一個類對象宏,名為foo ,擴展為以下標記序列:

# ifdef foo # define bar # endif

以后在源代碼中使用名稱foo (直到它被#undef編輯)將擴展為此,但是在擴展宏之后,生成的標記不會被評估為預處理指令。

這不是特定於編譯器的; 此行為由 C 和 C++ 標准定義。

預處理器指令與語言語句有些不同,語言語句以;終止。 並使用空格來分隔標記。 在預處理器的情況下,該指令以換行符終止,因此不可能使用 C++ 語言本身來執行您嘗試執行的操作。

您可以模擬這種情況的一種方法是將所需的行放入單獨的頭文件中,然后將其#include到您想要的位置。 單獨的標頭仍然必須將每個指令放在一行中,但是您包含它的地方只是一行,可以有效地執行您的要求。

完成類似任務的另一種方法是在使用 C++ 編譯器進行編譯之前,使用外部進程將 C++ 前文件處理成 C++ 源文件。 這可能比它的價值更麻煩。

一個假設的問題:是否有可能在一行中包含一個包含預處理器指令的 C++ 程序?

這樣的一行看起來像這樣:

#define foo #ifdef foo #define bar #endif

這樣一行的語義是什么?

此外,是否存在無法在一行中構建的指令組合?

如果這是特定於編譯器的,那么歡迎 VC++ 和 GCC 答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM