2016-09-22 65 views
0

VisualBasic.NET或C#支持條件編譯嗎?和內聯函數(宏)?VB.NET或C#中的內聯函數和條件編譯?

當我談條件編譯,我的意思是像C/C++,你這樣做:

#ifdef DEBUG 
    my_var = call_some_debug_function(); 
#else 
    my_var = call_some_final_function(); 
#endif 

而在編譯後的代碼,只有在調用call_some_debug_functioncall_some_final_function

當我談到內聯函數,我的意思是像C/C++宏:

#define sum(a, b) a + b 
... 
total = sum(a, b) 

,所得編譯代碼是:

total = a + b 

是這些建築由任何這些支持。 .NET語言?

+0

這裏的答案解釋*爲什麼* C#不支持宏的問題:http://stackoverflow.com/questions/1369725/why-arent -chere-macros-in-c –

+0

你可以對C和C++中的宏造成更大的破壞,C#肯定不允許定義像這樣的錯誤的函數風格的宏。但內聯優化並沒有根本的不同,最終導致機器代碼是一樣的。 –

回答

4

條件編譯由C#和VB支持:

C#

#if DEBUG 
    Foo(); 
#else 
    Bar(); 
#endif 

VB

#If DEBUG Then 
    Foo 
#Else 
    Bar 
#End If 

宏並不在C#或VB的支持,據我意識到......通常內聯留給了JIT編譯器。

1

是它的工作原理,但它更是這樣的:

#if DEBUG 
    my_var = call_some_debug_function(); 
#else 
    my_var = call_some_final_function(); 
#endif