【问题标题】:Is there a possibility of #define preprocessor macro definitions in VB.NET?VB.NET 中是否有可能使用#define 预处理器宏定义?
【发布时间】:2016-06-11 16:58:41
【问题描述】:

我正在尝试编写一个 VB.NET 程序来处理很多小操作,我真的很想念可以在 C/C++ 中使用的#define 宏。

是否有可能定义预处理器宏。例如,

#define MAX(x,y) ((x) > (y) ? (x) : (y))

上面将在运行时替换函数替换 C 中的令牌。是否可以在 VB.NET 中做同样的事情。

我不想编写函数,因为对我来说速度是关键,我无法承受将函数压入堆栈以完成小而重复的任务。

【问题讨论】:

  • 我不相信这是可能的(this 有点像骗子),但this 可能有助于提高性能。
  • 非常感谢马克。你的链接真的很有用!
  • 任何人都没有正当理由用 C 或 C++ 编写该宏。因此,您不会因为无法在 VB.NET 中做到这一点而失去任何东西。
  • @Cody Gray。在我看来,这些实际上很有用,因为当您需要重复的一行语句时它们增加了代码的可读性,但不会花费与函数调用和返回相同的性能。查看 Stockfish 或 Crafty 国际象棋引擎的源代码,看看它们有多大用处。
  • 任何值得使用的 C 或 C++ 编译器都支持内联函数,它为您提供了所有的好处而没有任何缺点。您所说的那些引擎要么是 20 年前编写的,当时内联函数不可用,要么作者几乎在同一时间学习 C 并且没有费心更新他们的知识。像这样调用一个简单的函数是免费的。你甚至不需要inline 关键字;编译器知道的足够多,可以自行内联。

标签: vb.net preprocessor directive


【解决方案1】:

根据上面 cmets 中 Mark 的回应,

无法在 VB.NET 中定义预处理器指令宏。然而,最接近的替代方法是定义一个函数并要求编译器对该函数使用积极内联。如果满足某些条件,使函数内联仍然是 JIT 决定。 (代码大小

.NET 4.5 及更高版本支持此功能。

Imports System.Runtime.CompilerServices 'This is needed to define the aggressive inlining constant

Class TestClass
    <MethodImplAttribute(MethodImplOptions.AggressiveInlining)> 'This will instruct compiler to use aggressive inlining if possible. Should be just before the function definition
    Public Function MyFunc(ByVal A As Integer, ByVal B As Integer) As Integer
        Return (A * A + B * B + 2 * A * B) 'An example function which should be inlined
    End Function
End Class

【讨论】:

  • 太糟糕了......有没有任何视觉工作室插件可以解决问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2018-09-30
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多