2

假设有人真的很懒,不想一直记住在行尾输入分号,有没有办法用宏来解决这个问题?

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

就像是:

#define '\n'  ';\n'
4

2 回答 2

2

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

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

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

会被这个理论宏毁掉。

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

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

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

  1. 尚未以分号结尾
  2. 不是开头#
  3. 不以 a 结尾{

虽然这仍然不完美。总会有你不想以分号结尾的情况,这会导致代码无法编译,尽管这比上面的 ifs 是空语句要好。

int var = //like here
    some_value;

func(arg1, arg2, // and here
     arg3, arg4);

int func()  // and here too
{
    //body
}
于 2013-04-14T02:09:17.373 回答
0

您不会在每行末尾自动需要分号。

没有办法编写用分号替换换行符的 C 预处理器宏,因为 C 宏名称必须是标识符——以非数字字符开头的字母数字字符(加上下划线)序列。

你必须这样做:

#define SC ;

int x = 0 SC

这比您要解决的问题更糟糕。

于 2013-04-14T02:06:52.797 回答