gpt4 book ai didi

c# - #define 指令目的

转载 作者:太空狗 更新时间:2023-10-29 20:31:22 25 4
gpt4 key购买 nike

C# 中#define 指令的用途和良好用法是什么?

关于此主题的问题已经很少,但我不需要答案。他们只举例说明它是如何工作的。但我需要更深入的解释:它为什么存在以及使用它的好方法是什么(如果有的话)。

基本上我知道如何使用它,但对我来说用法看起来很奇怪。让我们看一个例子:

#define DEV

#if DEV
Console.WriteLine("Development trace log message");
#endif

对我来说这与使用带有项目定义的条件编译符号的#if 条件构建完全不同。如果我们使用项目定义的符号,它会附加到项目构建配置,我们可以管理构建所需的代码(以及从构建中排除)使用的构建配置。所以代码

#if DEBUG
Console.WriteLine("Debug log message");
#endif

对我来说很好。但正如我所说,它与使用#define 指令完全不同,因为它是可管理的。我是否正确地认为第一个示例只能在每个构建中手动注释/取消注释 #define 行?如果是,它不可管理,难以维护,我认为 #define 的这种用法是极其糟糕的做法,并且根本不存在于该语言中。

我可以想象在#if 语句中使用#define/#undef。有点像

#if DEBUG
#if CLIENT1
#define TEST_CLIENT1
#endif
#endif

#if TEST_CLIENT1
connectionString = "Some specific test connection" //I know this is bad practice even in conditional. Only for example purpose.
#elif
//Read connection from config
#endif

#if UNITTESTS
#undef TEST_CLIENT1
#endif

#if TEST_CLIENT1
Console.WriteLine("Some message");
#endif

抱歉举出这么复杂的例子,但这至少是我觉得有用的东西。尽管我不会以任何方式编写这样的代码 =)。#define有什么好的用法吗?

PS:我自己已经 5 年没用过 #define 了,也不想这么做,但我得到了一个支持项目,它有很多奇怪的定义,甚至以奇怪的方式命名。这些定义通常放在文件的顶部,就像我在这里的第一个例子一样。而且我不知道如何维护这段代码。

最佳答案

除了没有它之外,我看不出有任何合理的理由,#IF 语句将不存在。

当您在编译器上使用 /define 指令定义项目级前提条件变量时,它实际上所做的就是向代码添加 #DEFINE

我认为这使它易于管理,但不是在代码中使用 /define 语句手动设置它。

另一个用处是可读性和范围。工程定义语句适用于工程,#DEFINE级语句只适用于一个文件。这有助于使事情井井有条,可读并停止可变问题。

关于c# - #define 指令目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11685427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com