2016-06-08 2 views
0

Я пытаюсь написать программу VB.NET, которая занимается множеством небольших манипуляций с битами, для которых мне действительно не хватает макроса #define, который можно использовать в C/C++.Есть ли возможность определения макросов препроцессора #define в VB.NET?

Есть ли возможность определить макросы препроцессора. Например,

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

Над подставим функцию во время выполнения заменяющего маркера в С. Можно ли сделать то же самое в VB.NET.

Я не хочу записывать функции, так как для меня скорость - это ключ, и я не могу позволить себе выполнять функции, выполняемые в стеке для небольших, но повторяющихся задач.

+2

Я не верю, что это возможно ([это] (http://stackoverflow.com/questions/4952413/vb-net-is-there-a-way-to-create-a-pre- processor-constant-that-behaves-as-a-simple) является своего рода обманом), но [this] (http://stackoverflow.com/a/23063080/2278086) может помочь в производительности. – Mark

+0

Большое спасибо. Ваша ссылка действительно полезна! –

+0

Нет никакой законной причины, чтобы кто-либо когда-либо писал этот макрос в C или C++. Таким образом, вы ничего не теряете, не имея возможности сделать это в VB.NET. –

ответ

0

Согласно ответ Марка выше в комментариях,

Это не представляется возможным определить директиву препроцессора макросы в VB.NET. Однако ближайшей альтернативой является определение функции и попросить компилятор использовать Aggressive inline для этой функции. По-прежнему будет решение JIT сделать функцию встроенной, если выполняются определенные условия. (размер кода < 32 байта в функции ...)

Это поддерживается в . 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 
+0

Слишком плохо ... есть ли какой-нибудь визуальный студийный аддон, который мог бы сделать трюк? – beppe9000

Смежные вопросы