你所遇到的最糟糕的实际宏/预处理器滥用是什么(请不要回答显然的IOCCC*哈哈*)?
如果有一个有趣的小片段或故事,请添加进来。目标是教授一些东西,而不是总是告诉人们“永远不要使用宏”。
p.s .:我以前使用过宏……但通常我最终会摆脱它们,当我有了“真正的”解决方案时(即使真正的解决方案是内联的,因此类似于宏)。
奖励:给出一个示例,其中宏确实比非宏解决方案更好。
相关问题:C++宏何时有利?
你所遇到的最糟糕的实际宏/预处理器滥用是什么(请不要回答显然的IOCCC*哈哈*)?
如果有一个有趣的小片段或故事,请添加进来。目标是教授一些东西,而不是总是告诉人们“永远不要使用宏”。
p.s .:我以前使用过宏……但通常我最终会摆脱它们,当我有了“真正的”解决方案时(即使真正的解决方案是内联的,因此类似于宏)。
奖励:给出一个示例,其中宏确实比非宏解决方案更好。
相关问题:C++宏何时有利?
从记忆中,它看起来像这样:
#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,它有语法着色!)
他是一名俄罗斯程序员,主要从事汇编语言工作。他狂热地追求节省尽可能多的字节,因为他之前曾在内存非常有限的系统上工作过。“那是卫星用的。只有很少的字节,所以我们将每个字节都用于许多事情。”(位操作,重复使用机器指令字节的数值)当我试图了解哪些卫星时,我只能得到“轨道卫星。用于使其进入轨道。”
他还有两个怪癖:在显示器上方安装了一个凸面镜 “用来知道谁在看”,偶尔会突然离开椅子做十个快速俯卧撑。他解释说这最后一个怪癖是“编译器发现代码错误。这是惩罚。”
我最糟糕的经历:
#define InterlockedIncrement(x) (x)++
#define InterlockedDecrement(x) (x)--
因为某个白痴把这段代码放在头文件中,我花费了两天时间来追踪一些多线程COM引用计数问题。我不会提及当时我工作的那家公司。
这个故事的寓意是什么?如果你不明白某个东西,阅读文档并学习它,不要只是让它消失。
#define ever (;;)
for ever {
...
}
for (;;)
惯用法,否则我会立即将这个宏添加到我的代码中。 - AnT stands with Russia(defmacro ever ())
,然后输入(require 'cl (ever))
。 - Joe D#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!");
}
挑战:有没有人可以用更少的定义和结构体来完成它?;-)
public
和static
与无意义的void
,将main(x)
替换为main()
,因此public static void main(String[] args)
变成了int main()
。然后将System
替换为S s; s
,所以System.out.println("Hello World!");
变成了 S s; s.out.println("Hello World!");
,它在S
结构体中调用F
结构体中的println
函数。 - Chris Lutz#define private public
#define class struct #define protected public
可以翻译为:将“class”定义为“struct”,将“protected”定义为“public”。 - Yakov Galka#define if while
这是对某人开的玩笑,但受影响的人并不觉得有趣。
丑陋的:
#define begin {
#define end }
/* and so on */
如果你想使用Pascal编码,请购买一款Pascal编译器,不要破坏美丽的C语言。
一个“架构师”,非常谦虚的人,你知道这种类型的,他拥有以下内容:
#define retrun return
因为他喜欢打字速度快。这位脑外科医生过去喜欢对那些比他聪明的人大喊大叫(而几乎每个人都比他聪明),并威胁要动用他的黑带。
killall rn
吗? - Joe Dsl
的程序,可以显示火车动画。(sl
代表“蒸汽机车”。) - Maxpm现实世界中的情况是这样的吗?MSVC在minmax.h中有名为max
和min
的宏,每当我想使用标准的std::numeric_limits<T>::max()
函数时,都会导致编译器错误。
一种介于Pascal语法和法语关键字之间的混合语言:
#define debut {
#define fin }
#define si if(
#define alors ){
#define sinon }else{
#define finsi }