【发布时间】:2012-02-24 22:23:51
【问题描述】:
本周大师this article中说:It is illegal to #define a reserved word.这是真的吗?我在规范中找不到任何东西,例如,我已经看到程序员重新定义新事物。
【问题讨论】:
-
绝对可以使用
#define来更改保留字的含义。事实上,它经常在The International Obfuscated C Code Contest 条目中使用。这是可能的,因为#define定义的宏在实际 C 编译器运行之前被单独的程序替换。 -
确定他们没有超载 new 运算符?由于预处理器首先运行 re-“#define”-ing 关键字的问题是您用替换字符串替换关键字,因此之后的代码很可能会被破坏。这样做通常是个坏主意,你为什么还要这样做?
-
@ted:想法是在源文件中重新定义新关键字,以便调用特定于平台的实现:Macintosh 上的
#define new newMac和PC 上的#define new newPc。在其他翻译单元中,相应的函数将定义特定于平台的内存分配器。我想这个想法是继续在任何地方使用new,同时在无法将每个调用重命名为 new 时具有特定于平台的行为。 -
过去,我们使用
#define for if (false) else for修复了 Visual Studio 6 对在for循环中声明的变量的不正确作用域 -
“我已经看到程序员重新定义新”是什么意思?你见过使用
#define的例子吗?还是您指的是重载new运算符?这是两种截然不同的东西。
标签: c++ standards keyword c-preprocessor