【问题标题】:Preprocessor directive Impossible define or cancel defining the preprocessor预处理器指令 不可能定义或取消定义预处理器
【发布时间】:2016-04-21 13:37:08
【问题描述】:

我正在尝试学习预处理器指令,所以我做了一个这样的简单示例:

using System;

namespace learning
{
    class Program
    {
        static void Main(string[] args)
        {
#define DEBUG
            test();
        }

        private void test()
        {
#if DEBUG
            Console.WriteLine("Debug mode");
#elif RELEASE
            Console.WriteLine("Release mode");
#else
            Console.WriteLine("Debug and release don't defined");
#endif
        }

    }
}

但不幸的是我得到了这个错误:

无法在文件中的第一个标记之后定义或取消定义预处理器符号

我从一本编程书中举这个例子,有什么问题?

更新(我的解决方案):

#define RELEASE
using System;

namespace learning
{
    class Program
    {
        static void Main(string[] args)
        {
#if DEBUG
            Console.WriteLine("Debug mode");
#elif RELEASE
            Console.WriteLine("Release mode");
#else
            Console.WriteLine("Debug and release don't defined");
#endif
            Console.ReadLine();
        }

    }
}

打印结果:Debug mode,但应该是Release mode。我做错了什么?

【问题讨论】:

  • 把#define DEBUG放在文件的开头。
  • 这本书基本上是错的。是哪本书?名字和耻辱......(我真的希望它不是我的......)
  • 我注意到代码是无效的,因为从没有明确目标的静态方法调用实例方法,也是......

标签: c#


【解决方案1】:

正如 Neo 所说,您可以在文件顶部定义它。

或者,如果您希望它是全局的,并且您正在使用 Visual Studio,您可以在您的项目属性中定义它(右键单击项目,选择属性,然后转到构建选项卡)。

该屏幕将允许您根据构建配置定义符号(因此您可以为调试构建设置符号并在切换配置时自动删除它)。

如果您不使用 Visual Studio,则可以将条件符号传递给 MSBuild 或 csc(命令行构建或命令行 c# 编译器)。所有这些选项都可以让您在不更改源代码的情况下设置/取消设置符号。

【讨论】:

  • 知道了,但可以定义更多符号吗?
  • @Dillinger:您可以在每个文件的开头以及项目设置中定义任意数量的符号。一旦进入“正常”代码,就无法定义更多符号。
  • 是的,您可以根据需要定义任意数量 - 只需将它们放在“构建”选项卡的“条件编译符号”中即可。
  • 赞成投票,因为这是一个比我更完整的答案。
【解决方案2】:

您需要将#define 行放在文件的最开头,在using 语句之前

【讨论】:

  • 哦,书里没有提到这个。我现在明白了。但是我已经更新了将#define RELEASE 放在首位的示例,为什么编译器会打印我:Debug mode 而不是Release mode?
  • @Dillinger:我猜你是在 Visual Studio 中以调试配置构建它,其中 DEBUG 已在项目设置中定义。
  • 看看我下面的答案,但除了调试符号之外,您还可以进行构建配置。这允许您设置一组选项并将它们应用于特定配置。例如,默认情况下,您在创建项目时会获得“调试”和“发布”配置。 Debug 启用了 DEBUG 符号,并关闭了编译器优化。发布开启编译优化(还有其他差异)。查看配置管理器(右键单击解决方案)。
  • @JonSkeet 你说得对。我打开了释放模式,现在控制台打印出正确的结果。
猜你喜欢
  • 2020-04-07
  • 1970-01-01
  • 2021-12-29
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多