让预处理器处理一段代码
发布时间:2020-12-16 07:28:21 所属栏目:百科 来源:网络整理
导读:我有一个系统,我在命令行上指定详细级别.在我的函数中,我检查指定的内容以确定我是否输入了代码块: #ifdef DEBUGif (verbose_get_bit(verbose_level_1)) { // arbitrary debugging/printing style code generally goes in here,e.g.: printf("I am printing
我有一个系统,我在命令行上指定详细级别.在我的函数中,我检查指定的内容以确定我是否输入了代码块:
#ifdef DEBUG if (verbose_get_bit(verbose_level_1)) { // arbitrary debugging/printing style code generally goes in here,e.g.: printf("I am printing this because it was specified and I am compiling debug buildn"); } #endif 我想让这个设置不那么繁琐,所以这就是我到目前为止所拥有的: // from "Verbose.h" bool verbose_get_bit(verbose_group_name name); // verbose_group_name is an enum #ifdef DEBUG #define IF_VERBOSE_BIT_D(x) if (verbose_get_bit(x)) #else // not debug: desired behavior is the entire block that follows gets optimized out #define IF_VERBOSE_BIT_D(x) if (0) #endif // not debug 现在,我可以这样做: IF_VERBOSE_BIT_D(verbose_GL_debug) { printf("I don't want the release build to execute any of this code"); glBegin(GL_LINES); // ... and so on } 我喜欢这个,因为它看起来像一个if语句,它作为一个if语句,很明显它是一个宏,并且它不会在发布版本中运行. 我有理由相信代码会被优化掉,因为它将被包装在if(false)块中,但我更喜欢它,如果有某种方式我可以让预处理器实际抛出整个块.可以吗? 解决方法
如果不将整个块包装在宏中,我无法想到一种方法.
但这可能适用于您的目的: #if DEBUG #define IF_VERBOSE_BIT_D(x) {x} #else #define IF_VERBOSE_BIT_D(x) #endif IF_VERBOSE_BIT_D( cout << "this is" << endl; cout << "in verbose" << endl; printf("Code = %dn",1); ) 实际上编译器应该能够优化if(0),但是当不在调试模式下块内的代码根本不能编译时,我经常会做类似的事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |