簡體   English   中英

錯誤的宏定義沒有錯誤

[英]No error on incorrect macro definition

在用constexpr auto替換宏時,我遇到了以下宏

#define MSG_SELECTED_INSPECTION [OF D] 490

這一直存在於項目中,並且可以正常編譯。

但是刪除空間

#define MSG_SELECTED_INSPECTION[OF D] 490

發出錯誤'[':unexpected macro definition

為什么第一行沒有錯誤發出?

宏在很大程度上是文本替換工具。 #define MSG_SELECTED_INSPECTION [OF D] 490是完全有效的宏定義。 每當看到MSG_SELECTED_INSPECTION ,它將被[OF D] 490替換。

#define MSG_SELECTED_INSPECTION[OF D] 490的原因是,該定義必須與宏名稱至少分隔一個空格。 這是因為並非所有編譯器都允許標識符中使用相同的字符集,如果

#define A$B C

會在一個實現中將宏A定義為擴展為$BC在另一個實現中將宏A$B為擴展為C

宏是文本替換。

因此,在此之前,您用[OF D] 490替換了MSG_SELECTED_INSPECTION 看來您以前沒有使用過MSG_SELECTED_INSPECTION

為什么第一行沒有錯誤發出?

宏有兩種形式,函數式和對象式(您所擁有的)。

#define CONST ...
#define FUNC(...) ...

在宏和要替換的標記序列之間需要一個空格作為分隔符。 當您刪除空間時,它不再是有效的(類似於對象的)宏定義。

暫無
暫無

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

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