- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个基于 C++ MFC 的应用程序。偶尔我会添加#if defined(_DEBUG) 语句以在开发过程中帮助我。我的经理要求我删除所有此类语句,因为他不想要两个版本的代码。我的感觉是,如果不能使用 #if defined(_DEBUG),错误更有可能在开发过程中潜入而不被发现。
还有其他人对此有任何想法吗?
最佳答案
嗯,运行时库,MFC有两个版本,debug和release,所以代码总会有两个版本。
#ifdef(_DEBUG) 和 assert() 的使用将帮助您进行调试。
但是...
不建议在#ifdef 子句中添加类/结构成员,因为对象的二进制接口(interface)会不同,如果您从调试版本和发布版本序列化或发送这样的结构,它们将不同。
例如:
#include <assert.h>
class MyClass
{
void SetA(int a)
{
assert(a<10000); // this is recommended
}
#ifdef _DEBUG
int m_debugCounter; // This is not recommended
#endif
};
在示例中,sizeof(MyClass) 不同于调试版本和发布版本。
关于c++ - 使用#if defined(_DEBUG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20392059/
我的一个头文件中有以下示例代码: #ifdef _DEBUG #define _DEBUG_NEW_REDEFINE_NEW 0 #include "debug_new.h" #else #defin
我有应用程序(可执行文件),但我没有该应用程序的源代码。我可以启动这个应用程序。我需要知道它是发布版还是调试版。 在 Windows 中是否有任何方法以编程方式确定该应用程序是使用 _DEBUG 宏编
我希望创建一个构建的项目的构建,以便它与发布构建相同,除了使用默认分配器的调试版本(对 alloc/free 等进行金丝雀检查)。编译器/CRT 是 Visual Studio 2010。 阅读 CR
如果我在 visual studio 2013 上工作,main 函数中的 #ifdef _DEBUG 是否有意义? 如果是,它的用途是什么? int _tmain(int argc, _TCHAR*
我正在编写一个基于 C++ MFC 的应用程序。偶尔我会添加#if defined(_DEBUG) 语句以在开发过程中帮助我。我的经理要求我删除所有此类语句,因为他不想要两个版本的代码。我的感觉是,如
应该使用哪个预处理器定义来指定代码的调试部分? 使用 #ifdef _DEBUG 或 #ifndef NDEBUG 或者有更好的方法,例如#define MY_DEBUG? 我认为 _DEBUG 是
Visual Studio 2008中vc++中的DEBUG和_DEBUG有什么区别。有什么区别吗,因为在我的项目中,在某些模块预处理器中是DEBUG,在某些模块中是_DEBUG。 最佳答案 在您自己
#ifdef _DEBUG a = "ram"; #else a = "sam"; #endif 它在 Visual Studio 中工作正常,因为 _DEBUG 是在预处理器中定义的,而它在 Lin
我只想在定义了 _DEBUG 时打印信息 #define DEBUG(y) y == true ? #define _DEBUG true : #define _DEBUG false #ifdef
我在 Linux C++ 上遇到 _DEBUG 宏的问题。我尝试使用这样的东西: #ifdef _DEBUG cout int main() { std::cout << "Hello worl
我正在用 C++ 编写一个小项目,我应该在代码中包含仅在 _DEBUG 条件下运行的部分。代码看起来像这样: #ifdef _DEBUG //Debuging code area #endif Vis
我项目的某些部分在 Release模式下不起作用。我可以使用 printf 检查它,但它不打印任何内容。我将在以下代码中向您展示: void SNKsomething::vGetState() { #
我有一个使用 Visual Studio 2008 编写的 VC++ 应用程序。出于调试目的,超时值根据构建类型(调试或发布)进行不同的编译。下面的代码示例是我尝试执行此操作的典型示例。 #ifdef
我可以转到默认 Visual Studio 2010 项目的设置,并查看在“配置属性”>>“C/C++”>> 中定义的 NDEBUG 或 _DEBUG “预处理器”的“预处理器定义”: 如果我转到默认
当我的代码中有这样的#ifdef #ifdef _DEBUG printf("This is a debug build"); #endif Qt Creator 将 printf 变灰,即使
我使用 twill (0.9) 并且我还想访问它的内置 Mechanize 分布(在 Python 2.6.6 上)。 我阅读了所有文档,但我不清楚他们是否支持或推荐,如果是,他们肯定不会宣传。 看来
我想根据我是否在 Debug模式中构建来有条件地排除/包含代码。 我可以像在 C++ 中那样使用像 #ifndef _DEBUG 这样简单的东西吗? 最佳答案 #if DEBUG Consol
我在 XCode、LLVM 和 _DEBUG 定义方面遇到问题。或者更具体地说,它似乎是带下划线的东西。 这是我第二次遇到这样的错误。这次我针对 PhysX 库进行编译。 /Library/Frame
我是一名优秀的程序员,十分优秀!