【发布时间】:2013-07-15 19:05:15
【问题描述】:
我在一个已经大量重命名了它的所有类和函数的框架上工作,我创建了一个允许使用旧名称的转换头:
#define OldClassA NewClassA
#define OldClassB NewClassB
...
现在我希望编译器在使用旧名称时警告用户。我该怎么做?
int main(){
NewClassA newA;
OldClassA oldA; // <-- This one would emit a warning
}
【问题讨论】:
-
临时修复:
__attribute__((deprecated)) class OldClass: public NewClass {}; -
不要使用
#define提供别名,这是不安全的。请改用typedef。 -
@syam:纯粹是好奇,但你能举一个不安全的例子吗?
-
@KarolyHorvath 一旦你的用户发现他们一直在扯头发几个小时的原因是因为你的无范围
#define搞砸了他们的代码的一部分与你的完全无关,他们会猎杀你,如果他们抓到你,会对你造成伤害。绝对不安全,对您用户的代码和您自己的健康都是如此……;) -
@KarolyHorvath 这也是不安全的,因为任何老白痴都只能
#undef OldClassA和#define OldClassA MaliciousClassA。typedef和using只能执行一次且无法撤消。
标签: c++ macros typedef c-preprocessor deprecated