Tag: c preprocessor

visual studio可以自动缩进/格式化预处理指令吗?

可能重复: 如何强制缩进C#条件指令? 假设我想在Visual Studio中键入: class Program { private const Byte NUM_THREADS = #if DEBUG 1; #else 8; #endif } 如果我只是输入它(即不手动修复任何缩进),Visual Studio将像这样格式化: class Program { private const Byte NUM_THREADS = #if DEBUG 1; #else 8; #endif } 有什么我可以做的,所以它自动缩进所以它看起来像第一个例子?

为整个项目全局声明预处理器符号(如DEBUG)

我想在NUnit和VS Tests之间切换,如下所示: #if !NUNIT using Microsoft.VisualStudio.TestTools.UnitTesting; #else using NUnit.Framework; using TestClass = NUnit.Framework.TestFixtureAttribute; using TestMethod = NUnit.Framework.TestAttribute; using TestInitialize = NUnit.Framework.SetUpAttribute; using TestCleanup = NUnit.Framework.TearDownAttribute; using TestContext = System.String; using DeploymentItem = NUnit.Framework.DescriptionAttribute; #endif 我的问题是,如何在一个地方声明NUNIT预处理器符号(App.config左右,会很棒),轻松地在NUnit和VSTests之间切换? 因为当我使用#define NUNIT ,它只适用于写入文件的文件。

何时在.net中使用预处理程序指令?

我认为这是一个简单的问题所以我认为我错过了一些明显的东西。 我真的没有使用预处理器指令,但我正在查看某人的代码,并且认为这是我应该熟悉的东西。 所以我看了msdn示例,它有代码: #define DEBUG // … #if DEBUG Console.WriteLine(“Debug version”); #endif 我的两个问题是: 在上面的例子中,为什么他们定义DEBUG? 如果你在debug v。发布模式下编译,我的印象是设置的? 查看具有#define MYTEST的另一个示例,然后根据它是否“定义”写入控制台,但这与仅使用变量有何不同? 我在这里想念的是什么?

需要引用:预处理器使用是不好的OO练习

我相信,像#if UsingNetwork这样的预处理器指令的使用是不好的OO实践 – 其他同事则不然。 我认为,当使用IoC容器(例如Spring)时,如果相应编程,可以轻松配置组件。 在这种情况下,可以通过IoC容器设置有效的IsUsingNetwork ,或者如果“使用网络”实现的行为不同,则应该实现并注入该接口的另一个实现(例如: IService , ServiceImplementation , NetworkingServiceImplementation )。 有人可以提供OO-Gurus的 引用或书籍中的参考资料 ,基本上读取“如果你尝试配置应该通过IoC容器配置的行为,预处理器使用是不好的OO实践”? 我需要这种引用来说服同事重构…… 编辑:我确实知道并同意在编译期间使用预处理程序指令更改目标平台特定代码很好,这就是预处理程序指令的用途。 但是,我认为应该使用运行时配置而不是compiletime-configuration来获得良好的设计和可测试的类和组件。 换句话说:使用#defines和#if超出它们的意图将导致难以测试代码和设计糟糕的类。 有没有人沿着这些方向阅读并能给我这样的话我可以参考?

C#中不同文件的预处理程序指令

我知道我可以在C#使用预处理程序指令来启用/禁用某些代码的编译。 如果我在同一个文件中定义一个指令,它可以正常工作: #define LINQ_ENABLED using System; using System.Collections.Generic; #if LINQ_ENABLED using System.Linq; #endif 现在,我在C++中使用将所有这些配置指令放在单个头文件中,并将其包含在我需要这些指令的所有文件中。 如果我在C#做同样的事情则不起作用: //Config.cs #define LINQ_ENABLED //MyClass.cs #define LINQ_ENABLED using System; using System.Collections.Generic; #if LINQ_ENABLED using System.Linq; #endif 我也尝试了以下但似乎我无法在命名空间内定义指令: //Config.cs namespace Conf{ #define LINQ_ENABLED } //MyClass.cs #define LINQ_ENABLED using System; using System.Collections.Generic; using Conf; #if LINQ_ENABLED using System.Linq; #endif 我究竟做错了什么? 在C#跨不同文件使用预处理器的正确方法是什么? 有没有更好的方法呢?

条件编译取决于C#中的框架版本

是否有任何预处理器符号允许类似的东西 #if CLR_AT_LEAST_3.5 // use ReaderWriterLockSlim #else // use ReaderWriterLock #endif 或其他一些方法来做到这一点?