在VB.NET中是否有#define预处理器宏定义的可能性?

时间:2016-06-08 17:04:57

标签: vb.net preprocessor directive

我正在尝试编写一个VB.NET程序,该程序处理许多小位操作,我真的错过了可以在C / C ++中使用的#define宏。

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

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

上面将在运行时替换函数替换C中的标记。是否可以在VB.NET中执行相同的操作。

我不想像我这样编写函数速度是关键,我无法负担在堆栈上推送小而重复的任务的功能。

1 个答案:

答案 0 :(得分:0)

根据Mark在评论中的回应,

无法在VB.NET中定义预处理程序指令宏。但是,最接近的选择是定义一个函数并要求编译器对该函数使用Aggressive内联。如果满足某些条件,那么JIT决定将函数内联。 (代码大小< 32字节在函数中...)

.NET version 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