为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
慕姐4208626 2019-10-12 14:21:37
您遇到过的最糟糕的 现实世界宏/预处理器滥用情况(请不要有故意的IOCCC回答*哈哈*)?如果确实很有趣,请添加简短的摘录或故事。目的是教一些东西,而不是总是告诉人们“从不使用宏”。ps:我以前使用过宏...但是通常,当我有一个“真实的”解决方案时,最终我会摆脱它们(即使真正的解决方案是内联的,因此它变得类似于宏)。
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

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


#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,它具有语法着色!)


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


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


查看完整回答
反对 回复 2019-10-12
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我最糟糕的是:


#define InterlockedIncrement(x) (x)++

#define InterlockedDecrement(x) (x)--

我花了两天的时间来解决一些多线程COM引用计数问题,因为有些白痴将其放在头文件中。我不会提到我当时工作的公司。


这个故事的寓意?如果您不了解某些内容,请阅读文档并了解有关内容。不要只是让它消失。


查看完整回答
反对 回复 2019-10-12
?
动漫人物

TA贡献1815条经验 获得超10个赞

#include <iostream>

#define System S s;s

#define public

#define static

#define void int

#define main(x) main()

struct F{void println(char* s){std::cout << s << std::endl;}};

struct S{F out;};


public static void main(String[] args) {

  System.out.println("Hello World!");

}

挑战:谁能用更少的定义和结构来做到这一点?;-)


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 458 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信