是否可以创建一个宏,将换行符替换为分号

Is it possible to make a macro that replaces newlines with semicolons

本文关键字:换行符 替换 一个 创建 是否      更新时间:2023-10-16

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

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

类似:

#define 'n'  ';n'

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

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

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

将被这个理论宏毁掉。

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

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

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

  1. 没有以分号结尾
  2. 不以#
  3. 开头
  4. 不以{结尾

虽然这还不完美。在某些情况下,你不希望以分号结束,因为这会导致代码无法编译,尽管这比上面的if为空语句要好。

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

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

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

你必须这样做:

#define SC ;
int x = 0 SC

这比你想解决的问题更糟糕