Release编译时#ifdef _DEBUG引发C4100警告的解决方法咨询
解决Release模式下未使用变量触发C4100警告的方法
针对你编写的这段代码:
void MyExampleMethod(string errorMessage) { #ifdef _DEBUG MessageBox(errorMessage); #endif //do something in release and debug }
在Release模式编译时因errorMessage未被使用触发C4100警告,这里有几个无需抑制警告的实用解决办法:
方案一:通过宏控制参数命名
用编译宏让参数在Debug模式下保留名称,Release模式下变成匿名参数,编译器就不会检查它的使用情况:
#ifdef _DEBUG #define DEBUG_ARG(name) name #else #define DEBUG_ARG(name) /*name*/ #endif void MyExampleMethod(string DEBUG_ARG(errorMessage)) { #ifdef _DEBUG MessageBox(errorMessage); #endif //do something in release and debug }
方案二:无副作用地“使用”参数
在Release分支里加一行强制转换为void的代码,让编译器认为参数被合理使用,且完全不会产生运行时开销:
void MyExampleMethod(string errorMessage) { #ifdef _DEBUG MessageBox(errorMessage); #else (void)errorMessage; #endif //do something in release and debug }
方案三:拆分Debug/Release版本的方法
如果Debug和Release的逻辑差异较大,可以直接拆分方法实现,各自处理参数:
#ifdef _DEBUG void MyExampleMethod(string errorMessage) { MessageBox(errorMessage); //do something in debug } #else void MyExampleMethod(string) // Release模式下参数匿名 { //do something in release } #endif
内容的提问来源于stack exchange,提问作者CJ Thiele
相关产品推荐
相关产品推荐

