在C/C++中,我們有預處理指令(請參閱問題的標題)。他們在D語言中的類比是什麼? 如何在編譯時檢測操作系統類型(Windows,Linux,Mac OS X,FreeBSD,...)和處理器類型(例如:32或64位)?D編程語言中「#ifdef」,「#ifndef」,「#else」,「#elif」,「#define」,「#undef」的相似之處是什麼?
回答
#if condition
由static if(condition)
取代(用得多編譯時間評估)
#ifdef ident
由version(ident)
#define ident
代替由version = ident
#define ident replacement
代替由alias ident replacement
更多信息替換在http://dlang.org/version.html和01的列表
這可能是關於預處理指令用C VS d部分使用的: http://dlang.org/pretod.html
關於操作系統和處理器類型的檢測,這個線程看起來似乎回答您的問題:http://forum.dlang.org/thread/[email protected]?page=1
注意:我熟悉C/C++,但不熟悉D,如果我的答案不足,請告訴我,以便我可以更改它。希望我已經指出你在正確的方向。
更新:最佳答案已經在dlang.org上:http://dlang.org/pretod.html。
D沒有預處理器。相反,它提供了強大的編譯時評估和內省功能。
這裏是典型的C的簡單列表/ C++到d轉換,鏈接到相關文件:
C/C++:#ifdef
,#ifndef
,#else
,#elif
d:version
[link]
C/C++:#if <condition>
d:static if
[link]
C/C++:#define
d:d翻譯依賴於殼體。
簡單的C/C++定義像#define FOO
被轉換爲D的 「version」。例如:version = FOO
代碼像#define BAR 40
被翻譯成以下d代碼:enum BAR 40
或在極少數情況下,您可能需要使用alias
。
複雜限定像#define GT_CONSTRUCT(depth,scheme,size) \ ((depth) | (scheme) | ((size) << GT_SIZE_SHIFT))
被翻譯成D的模板:
// Template that constructs a graphtype
template GT_CONSTRUCT(uint depth, uint scheme, uint size) {
// notice the name of the const is the same as that of the template
const uint GT_CONSTRUCT = (depth | scheme | (size << GT_SIZE_SHIFT));
}
(Example taken from the D wiki)
C/C++:#undef
d:沒有足夠的翻譯,我知道
- 1. #ifdef或#ifndef中的#define#
- 2. 的#define,#ifdef來和#undef #ENDIF
- 3. 什麼是'D'編程語言?
- 4. .NET語言之間有什麼區別和相似之處?
- 5. #ifdef,#ifndef和#undef是否與函數式宏一起工作?
- 6. #ifdef/#ifndef和#endif
- 7. #ifndef #define
- 8. 的#ifdef和的#ifndef
- 9. 的#define不工作和#undef使用的#ifndef
- 10. D編程語言IRC庫
- 11. D編程語言中的C#事件
- 12. D編程語言中的Pimpl-idiom
- 13. 什麼是果醬的編程語言
- 14. 什麼是GPU的編程語言
- 15. Udemy的編程語言是什麼?
- 16. 什麼是「自編程語言」
- 17. 這是什麼編程語言?
- 18. ¿這是什麼編程語言?
- 19. 這是什麼編程語言?
- 20. 這是什麼編程語言?
- 21. 這是什麼編程語言
- 22. 什麼是正式編程語言?
- 23. 什麼是最好的視頻處理編程語言?
- 24. Windows:什麼編程語言?
- 25. 什麼編程語言?
- 26. 什麼是常見網站漏洞以及與之相關的編程語言?
- 27. 包括逆天的#ifndef的#define語句預處理
- 28. D程序中與set.seed(1234)相同的語法是什麼「R
- 29. MVC和MVVM之間的區別和相似之處是什麼?
- 30. nasm彙編語言中的$是什麼?
我完全忘了那個網頁... – DejanLekic