在C++中,我们可以使用#ifdef在发布时消除一些调试语句.C#与预处理器中的C++不同.我仍然可以使用C##if获得相同的结果.我们希望通过更改一个地方来消除所有调试语句,并且我们有几种不同类型的调试语句.可以有一个包含所有#ifdef标志的文件来打开或关闭那些调试语句吗?谢谢
Ree*_*sey 20
您可以将代码包装在:
#if DEBUG
// debug only code
#endif
Run Code Online (Sandbox Code Playgroud)
但是,我不推荐这个.它通常是一个更好的替代方法,只需创建一个方法并使用该[Conditional("DEBUG")]属性标记它.有关详细信息,请参阅MSDN上的条件.这允许您只进行调试方法:
[Conditional("DEBUG")]
public void DebugPrint(string output) { // ...
}
Run Code Online (Sandbox Code Playgroud)
然后,你可以正常调用它:
DebugPrint("Some message"); // This will be completely eliminated in release mode
Run Code Online (Sandbox Code Playgroud)
根据MSDN 文档
使用#define 创建的符号的范围是定义该符号的文件。
因此,您不能拥有一个文件来定义在整个程序中使用的其他几个定义。最简单的方法是在项目文件上使用不同的配置,并在编译器的命令行上指定每个配置的定义列表。
更新: 您可以通过右键单击项目并选择Properties在 Visual Studio 中设置项目定义。然后选择“构建”选项卡。一般情况下,您可以在“条件编译符号”下指定要发送到编译器的定义。您可以使用配置管理器(构建->配置管理器)定义不同的项目设置
更新 2:
指定“条件编译符号”后,Visual Studio 会/define在编译器的命令行上发出 一个(C# 的 csc.exe),您可以在构建项目时通过检查输出窗口来看到这一点。来自csc.exe 的 MSDN 文档
/define 选项与使用 #define 预处理器指令具有相同的效果,只是编译器选项对项目中的所有文件都有效。符号在源文件中保持定义,直到源文件中的 #undef 指令删除该定义为止。使用 /define 选项时,一个文件中的 #undef 指令不会影响项目中的其他源代码文件。
您可以将此选项创建的符号与#if、#else、#elif 和#endif 一起使用来有条件地编译源文件。
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |