簡體   English   中英

為什么我的宏無法編譯?

[英]Why my macro doesn't compile?

#define LINE_FILE ("Line"#__LINE__"of file"__FILE__)

int main(void)
{
    printf("%s", LINE_FILE);
}

我的期望:

LINE_FILE =“文件行號線”

printf()可以輸出此字符串。

http://ww2.sinaimg.cn/large/005FchG6gw1esb0pvwxr3j30he06jjt7.jpg

__LINE__不會擴展為“字符串”,而是擴展為int

為了解決這個問題,您可能需要執行以下操作:

#define _LINE_FILE2(filename, linenumber) "Line " #linenumber " of " filename 
#define _LINE_FILE1(filename, linenumber) _LINE_FILE2(filename, linenumber)
#define LINE_FILE _LINE_FILE1(__FILE__, __LINE__)

有關(gcc)的更多詳細信息

您需要一個字符串化助手

#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

然后

#define LINE_FILE ("Line" STR(__LINE__)"of file"__FILE__)

AFAIK您不能在預處理器上執行此操作,通常的方法是:

    printf("Line %d of file %s", __LINE__, __FILE__);

要調試宏,可以單獨使用C預處理器。

行號

#define LINE_FILE_WRONG ("Line"#__LINE__"of file"__FILE__)

// solution of LPs
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define LINE_FILE ("Line " STR(__LINE__) " of file " __FILE__)

LINE_FILE_WRONG
LINE_FILE

為此文件運行C預處理程序並獲取

% cpp linenumber.c
# 1 "linenumber.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "linenumber.c"







("Line"#8"of file""linenumber.c")
("Line " "9" " of file " "linenumber.c")

暫無
暫無

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

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