[英]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.