c++ - 是否可以制作一个用分号替换换行符的宏

标签 c++ macros

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

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

类似于:

#define '\n'  ';\n'

最佳答案

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

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

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

会被这个理论宏毁掉。

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

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

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

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

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

int var = //like here
    some_value;

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

int func()  // and here too
{
    //body
}

关于c++ - 是否可以制作一个用分号替换换行符的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15994974/

相关文章:

c++ - 检查是否在 unix 中加载了共享对象

rust - Rust 宏可以跨版本共享吗?

c++ - FL_输入到字符串中

c++ - 在c++中模拟基本字符串的使用

c++ - 使用 GCC 构建 Linux 可执行文件

c++ - 自动销毁堆对象的宏

C++:忽略声明

c++ - 基本嵌套循环计算 1 - 239(含)之间的素数

c - 获取宏以进行连接和字符串化

recursion - 如何在 Lisp 中对 &REST 参数编写递归宏调用?