C 语言这段预处理命令错在哪里?为什么编译器报错?

2015-05-20 20:39:19 +08:00
 rundis

define LINEFILE ("Line"#LINE"of file"FILE_)

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

如上的预处理命令,希望然而编译器报错,也不知道错在哪。。。

LINE_FILE = "Line 行数 of file 文件名"

然而编译器报错,也不知道错在哪。。。
http://ww2.sinaimg.cn/large/005FchG6gw1esazxa0fenj30he06jjt7.jpg

2543 次点击
所在节点    问与答
13 条回复
rundis
2015-05-20 20:39:38 +08:00
Kristd
2015-05-20 22:24:27 +08:00
是__FILE__和__LINE__吗
ytimex
2015-05-20 22:24:51 +08:00
感觉是#define
VirgilMing
2015-05-20 23:00:21 +08:00
你最好把整个代码用 Markdown 的代码块包起来。现在这个没法看。
rundis
2015-05-21 05:50:56 +08:00
@ytimex
@Kristd
嗯!这是一段宏!
rundis
2015-05-21 05:57:23 +08:00
<pre>
#define LINEFILE ("Line"#LINE"of file"FILE_)
int main(void)
{
printf("%s", LINE_FILE);
}
</pre>
重打一遍。。。
rundis
2015-05-21 05:58:28 +08:00
@rundis 无视掉<pre>标签。。。另外宏少了下划线,原文是有的,宏叫做LINE_FILE而不是LINEFILE。。。
clapse
2015-05-21 17:12:59 +08:00
#define LINE_FILE(LINE,FILE) \
printf("Line %s of file %s",#LINE,#FILE)

int main(void)
{
LINE_FILE(21,"TEST");

return 0;
}
rundis
2015-05-22 05:49:27 +08:00
@clapse 完全没有用到预定义宏如何显示文件名和行号、。。
clapse
2015-05-22 10:42:35 +08:00
@rundis ,抱歉,昨天读题能力被封印了

#include <stdio.h>
using namespace std;

#define LINETOSTR(LINE) #LINE
#define FILETOSTR(FILE) #FILE

#define LINE_FILE_PRINT(LINE,FILE) \
printf("Line %s of file %s",LINETOSTR(LINE),FILETOSTR(FILE))

#define LINE_FILE LINE_FILE_PRINT(__LINE__,__FILE__)


int main(void)
{
LINE_FILE;

return 0;
}
rundis
2015-05-22 23:01:09 +08:00
@clapse 然而大体意思就是说,不能够嵌套宏咯?
clapse
2015-05-23 11:36:06 +08:00
@rundis 宏有嵌套规则,建议 看下 # 和 ## 的展开规则
rundis
2015-05-23 13:44:28 +08:00
@clapse 好!谢谢!一直以为预定义宏可以不管嵌套规则直接用…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/192539

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX