Muh*_*ira 0 c syntax macros preprocessor-directive
我希望我可以做这样的事情:
int i = 0;
until (i == 2){
printf("yes\n");
i++;
}
Run Code Online (Sandbox Code Playgroud)
在不详细说明具体内容的until情况下,我确信读者从上面的代码中知道算法是什么。是的,我知道我可以使用while(!condition){}.
输出将是:
yes
yes
Run Code Online (Sandbox Code Playgroud)
那么我有可能实现我的目标吗?
我觉得宏可以用define其他东西来做到这一点。但我缺乏关于 C 中预处理指令语法的知识
#define until <what should I fill here>
Run Code Online (Sandbox Code Playgroud)
编辑:很多人都是因为我在做什么而触发的。如果打扰你们了,我很抱歉。别担心,这个语法仅供我自己使用。所以我希望不要打扰那些不小心读到我代码的代码读者或者C牧师。
Lun*_*din 10
首先,我必须强调这一点:使用类似函数的宏来创建你自己的秘密、私有语言是 C 语言中的一大罪过。这可能是你能做的最糟糕的事情。
为什么?因为阅读您代码的其他人应该了解 C。但是,他们不应该了解您的秘密私有宏语言。此外,他们绝对没有兴趣学习你的秘密私人宏语言。
所以请不要在实际程序中做这样的事情。
话虽这么说,您自己几乎已经回答了这个问题:
#define until(condition) while(!(condition))
Run Code Online (Sandbox Code Playgroud)
请注意condition,作为类似函数的宏参数,应放在括号内。这可以防止意外的运算符优先级错误。例如,如果调用者通过,until(i + 1)那么您希望它循环while(!(i+1))而不是 while(!i + 1)。
来自专家 C 编程:
宏的使用最好局限于命名文字常量,即一些精心选择的结构的简写。定义宏名称时全部大写,这样在使用时,就可以立即清楚它不是函数调用。避免使用任何修改底层语言的 C 预处理器,使其不再是 C。
回复:“我确信读者知道上面代码中的算法是什么。”
不,这会让人更加困惑,因为关键字until不是C语言的一部分。输入一些额外的字符并不需要太多。
话虽这么说,你可以这样做:
#define until(condition) while(!(condition))
Run Code Online (Sandbox Code Playgroud)
使用以下命令编译您的程序:
gcc -E -nostdinc main.c
Run Code Online (Sandbox Code Playgroud)
查看预处理器做了什么改变。
但这仍然是一种令人憎恶的行为,是人们不会容忍的事情。
| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |