2016-06-08 6 views
0

저는 C/C++에서 사용할 수있는 #define 매크로를 실제로 놓치고있는 많은 작은 비트 조작을 처리하는 VB.NET 프로그램을 작성하려고합니다.VB.NET에서 #define 전 처리기 매크로 정의가있을 수 있습니까?

사전 처리기 매크로를 정의 할 수 있습니까? 예를 들어,

위의 코드는 런타임시 함수를 C로 대체합니다. VB.NET에서도 동일한 작업을 수행 할 수 있습니까?

필자는 나를 위해 속도를 쓰고 싶지 않습니다. 속도가 중요하기 때문에 작지만 반복적 인 작업을 위해 스택에 푸시되는 기능을 감당할 수 없습니다. 코멘트에 위의 마크의 응답으로 당

+2

나는 그것이 가능하다고 믿지 않는다. ([this] (http://stackoverflow.com/questions/4952413/vb-net-is-there-a-way-to-create-a-pre- processor-constant-that-as-a-simple)은 일종의 속임수입니다. 그러나 [this] (http://stackoverflow.com/a/23063080/2278086)는 성능에 도움이 될 수 있습니다. – Mark

+0

Mark에게 감사드립니다. 귀하의 링크가 정말 유용합니다! –

+0

누구나 그 매크로를 C 또는 C++로 쓸 수있는 합법적 인 이유가 없습니다. 그래서 VB.NET에서는 할 수 없으므로 아무 것도 잃지 않습니다. –

답변

0

, VB.NET에서 처리기 지시문 매크로를 정의 할 수 없습니다

. 그러나 가장 가까운 대안은 함수를 정의하고 해당 함수에 대해 적극적인 인라인을 사용하도록 컴파일러에 요청하는 것입니다. 특정 조건이 충족되면 함수를 인라인으로 만드는 것은 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