您遇到过的最糟糕的现实世界宏/预处理器滥用情况是什么?


176

您遇到过的最糟糕的 现实世界宏/预处理器滥用情况(请不要有任何人为的IOCCC答案* haha​​ *)?

如果确实很有趣,请添加一个简短的摘要或故事。目的是教一些东西,而不是总是告诉人们“从不使用宏”。


ps:我以前使用过宏...但是通常,当我有一个“真实的”解决方案时,我最终会摆脱它们(即使真正的解决方案是内联的,因此它变得类似于宏)。


奖励:举一个例子,其中宏确实比非宏解决方案好。

相关问题: C ++宏什么时候有益?


+1引起人们对我在Macros手中遭受的猖abuse虐待的关注。
i_am_jorf

37
#define true false //调试愉快:)
2009年

社区Wiki意味着,没有人会通过对该问题或其答案进行的上/下投票获得(或失去)声誉。许多人将这样的问题视为获得声誉的廉价且简便的方法,因此,如果将其标记为社区Wiki,人们不太可能全神贯注地关闭它。
Graeme Perrow,2009年

2
“人们可能会弯腰变形并合上它”:您是否暗示不希望堆栈上出现任何幽默/有趣的内容?
Trevor Boyd Smith,2009年

2
很快,预处理器是该语言的一部分,因此与其他任何事物一样,它的使用不会有害/错误。
男孩先生2010年

Answers:


410

从内存看,它看起来像这样:

#define RETURN(result) return (result);}

int myfunction1(args) {
    int x = 0;
    // do something
    RETURN(x)

int myfunction2(args) {
    int y = 0;
    // do something
    RETURN(y)

int myfunction3(args) {
    int z = 0;
    // do something
    RETURN(z)

是的,没错,任何函数都没有右括号。语法突出显示是一团糟,因此他使用vi进行编辑(不是vim,它具有语法着色!)

他是一位俄罗斯程序员,主要从事汇编语言工作。他热衷于保存尽可能多的字节,因为他以前曾在内存非常有限的系统上工作。“这是用于卫星的。只有很少的字节,因此我们将每个字节用在很多事情上。” (摆弄,重复使用机器指令字节作为它们的数值)当我试图找出哪种卫星时,我只能得到“在轨卫星。为了进入轨道”。

他还有另外两个怪癖:一面安装在监视器上方的凸面镜,“用于了解谁在看”,偶尔从椅子上突然退出,进行十次俯卧撑。他将最后一个解释为“编译器发现代码错误。这是惩罚”。


87
“编译器在代码中发现错误。这是惩罚”。!! 公司发现你...对同事的惩罚!
学习

227
在苏联俄罗斯,程序会编译您!
Crashworks

53
当我读到有关编译器错误“惩罚”时,我想到的第一件事是“多比必须动手”。
Graeme Perrow,2009年

124
我认为,如果每次编译器在我们的代码中发现错误时,我们都进行10次俯卧撑,那么程序员(包括我自己)将更合适。这也可以减少通过编译进行测试的发生。
MikeyB 2009年

5
那个家伙听起来很棒。但是,是的,我不知道这应该如何提高代码大小。
jalf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.