是否可以创建一个用分号替换换行符的宏

时间:2013-04-14 02:04:25

标签: c++ macros

说某人真的很懒,并且不想继续记住在一行的末尾键入分号,有没有办法通过宏来克服它?

我不是说这是我想做的事情。只是好奇,如果有人试过/如果可能的话。

类似的东西:

#define '\n'  ';\n'

2 个答案:

答案 0 :(得分:2)

不,宏标识符只能是字母,数字和下划线。

此外,这会导致大量不必要的分号

if (cond)
    stmt;
/* or */
if (cond)
{
    stmts;
}

会被这个理论宏所破坏。

如果您想用分号替换所有换行符后跟换行符(这是非常糟糕的主意),您可以使用sed行替换

sed -i "s/^\([^#].*[^\;{]\)$/\1;/" file.cpp

这将在任何一行的末尾添加一个半冒号:

  1. 尚未以半冒号结尾
  2. 不以#
  3. 开头
  4. 不以{
  5. 结尾

    虽然这还不完美。总会出现你不想以半冒号结束的情况,这会导致代码无法编译,尽管这比上面的ifs为空语句要好。

    int var = //like here
        some_value;
    
    func(arg1, arg2, // and here
         arg3, arg4);
    
    int func()  // and here too
    {
        //body
    }
    

答案 1 :(得分:0)

你不会在每一行的末尾自动需要一个分号。

编写一个用分号替换换行符的C预处理器宏是不可能的,因为C宏名称必须是标识符 - 一系列字母数字字符(加上下划线)以非分号开头数字字符。

您必须这样做:

#define SC ;

int x = 0 SC

这比您尝试修复的问题更糟糕。