如何检查2个定义是相同的
How to check 2 defines are the same?
在MFC应用程序中,有一个用于诊断内存泄漏等的定义。
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
在afx.h中,存在DEBUG_NEW定义
void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
#define DEBUG_NEW new(THIS_FILE, __LINE__)
如何检查新定义为DEBUG_new?
我试着用
#if defined(new) && new == DEBUG_NEW
它不起作用。
如果您有权访问有问题的MFC应用程序代码,我会将#ifdef
结构更改为:
#ifdef _DEBUG
#define new DEBUG_NEW
#define NEW_REDEFINED
#endif
然后您可以使用#ifdef NEW_REDEFINED
进行检查
在宏中重新定义关键字的想法有点疯狂,我当然希望没有其他人遵循MFC的想法。在这种情况下,一个简单的
#ifdef new
就足够了。如果使用默认的new
,则不会将关键字定义为宏。
根据你想要的具体内容,另一种选择可能是简单地使用
#ifdef _DEBUG
相信new
是以您期望的形式定义的,当且仅当定义了_DEBUG
时。
但是C++没有任何可以在#if
表达式中执行的检查,该检查将告诉您宏是否以特定形式定义。
如果您只需要知道这两个定义在运行时是否相同,您可以使用以下内容:
#include "string.h"
#define STR(s) #s
#define compare(a, b) (strcmp(STR(a), STR(b)) == 0)
这将比较用于定义每个宏的确切字符串,因此它可能只在某些情况下有用,请考虑:
#define MY_INT1 int
#define MY_INT2 int
#define MY_INT3 (int)
#define MY_FLOAT float
compare(MY_INT1, MY_INT2) // Evaluates to true
compare(MY_INT1, MY_INT3) // Evaluates to false
compare(MY_INT1, MY_FLOAT) // Evaluates to false
相关文章:
- 我希望定义两个具有相同代码的不同名称的库
- 已定义/多个对象定义/可视化工作室
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 使用 C++ 类定义多个数据结构
- 错误:当定义两个带有标头文件的类时,将重新定义类
- 为什么 for 循环不能定义两个作用域的变量?
- 在一个文件中定义多个类时,我发现我的主函数无法访问较低类中的函数
- 在编译时间定义多个派生类
- 如何从同一个头文件中定义 2 个类,而一个类依赖于另一个类
- 定义多个构造函数时的默认构造函数行为
- C++:定义多个构造函数时的对象创建/销毁序列
- 如何一次定义几个功能,仅因名称而差异(不使用宏)
- 定义多个单词dataype
- 全局重新定义多个冲突的预处理器定义
- 使用预处理器定义多个相似的变量C++
- 在C 中定义多个变量
- 为什么我不能在 If 语句中定义多个变量以相互相等?
- 定义多个名称相同但类型的函数如何影响C++编译器的性能?
- 我可以重用同一个模板来声明/定义多个东西吗(而不复制模板代码)
- 定义多个派生接口成员