c - 为什么我的宏不能编译?

标签 c macros c-preprocessor predefined-macro

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

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

我的预期:

LINE_FILE = "Line linenumber of file filename"

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) 细节

关于c - 为什么我的宏不能编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30350558/

相关文章:

macros - 在 Clojure 中将宏分解为宏或函数之间有什么区别吗?

c++ - 在编写 EMPTY_OR 宏时需要一些帮助

c - 输出意外

c# - 有没有办法将数据流式传输到 GIT 而不是传递文件名?

c - 什么是内联运算符 C

c - 将数组文字作为宏参数传递

ios - 使用 #DEFINE 语句时您是否会失去静态类型能力?

c - Tiny C编译器: Undefined symbol "main" when main is defined?

c - C中对有符号和无符号字符的需求是什么

c - 如何检查参数是否是 C 预处理器宏中的整型常量表达式?