V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rundis
V2EX  ›  问与答

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

  •  
  •   rundis · 2015-05-20 20:39:19 +08:00 · 2339 次点击
    这是一个创建于 3256 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    13 条回复    2015-05-23 13:44:28 +08:00
    rundis
        1
    rundis  
    OP
       2015-05-20 20:39:38 +08:00
    Kristd
        2
    Kristd  
       2015-05-20 22:24:27 +08:00
    是__FILE__和__LINE__吗
    ytimex
        3
    ytimex  
       2015-05-20 22:24:51 +08:00
    感觉是#define
    VirgilMing
        4
    VirgilMing  
       2015-05-20 23:00:21 +08:00
    你最好把整个代码用 Markdown 的代码块包起来。现在这个没法看。
    rundis
        5
    rundis  
    OP
       2015-05-21 05:50:56 +08:00
    @ytimex
    @Kristd
    嗯!这是一段宏!
    rundis
        6
    rundis  
    OP
       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
        7
    rundis  
    OP
       2015-05-21 05:58:28 +08:00
    @rundis 无视掉<pre>标签。。。另外宏少了下划线,原文是有的,宏叫做LINE_FILE而不是LINEFILE。。。
    clapse
        8
    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
        9
    rundis  
    OP
       2015-05-22 05:49:27 +08:00
    @clapse 完全没有用到预定义宏如何显示文件名和行号、。。
    clapse
        10
    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
        11
    rundis  
    OP
       2015-05-22 23:01:09 +08:00
    @clapse 然而大体意思就是说,不能够嵌套宏咯?
    clapse
        12
    clapse  
       2015-05-23 11:36:06 +08:00
    @rundis 宏有嵌套规则,建议 看下 # 和 ## 的展开规则
    rundis
        13
    rundis  
    OP
       2015-05-23 13:44:28 +08:00 via iPhone
    @clapse 好!谢谢!一直以为预定义宏可以不管嵌套规则直接用…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3690 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:49 · PVG 08:49 · LAX 17:49 · JFK 20:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.