4
A
回答
3
正如其他人所說,它的定義是空的,也就是說,在大多數情況下,它的替換文本是空的。然而,在常量表達式爲#if
聲明,其值爲0:
#define XXX
#if XXX == 0
// yes, we get here
#elif
// no, we don't get here
#endif
對於未在所有定義的名稱同樣的事情:
#if YYY == 0
// yes, we get here
#elif
// no, we don't get here
#endif
這兩個之間的區別是,後者沒有被定義,而前者是:
#ifdef XXX
// yes, we get here
#endif
#if defined(XXX)
// yes, we get here
#endif
和YYY
那些測試的既不成功。
11
它會用什麼代替替換文本:
#define FOO
int FOO main() FOO
{
}
此外,#ifdef FOO
會成功。
空定義可以是相當有用的,例如在此(幼稚)函數形式:
#ifndef NDEBUG
# include <cstdlib>
# define MakeSureThat(X) if (!(X)) { std::abort(); }
#else
# define MakeSureThat(X)
#endif
用法:
void do_stuff(Foo * p)
{
MakeSureThat(p != nullptr); // won't generate any code if NDEBUG
}
4
它將限定XXX
到其餘部分的像往常一樣,行。
沒關係,在這種情況下它是空的。
這裏沒有任何例外。
相關問題
- 1. '#define xxx'(沒有任何價值!)與'#define xxx yyy'(帶值)形成對比嗎?
- 2. #define的要點是什麼?
- 3. 什麼是價值?
- 4. 'this'的價值是什麼?
- 5. CLOUDAMQP_URL的價值是什麼?
- 6. 什麼是angularfire的$價值?
- 7. x的價值是什麼?
- 8. HSHELL_FLASH的價值是什麼?
- 9. 1e100f的價值是什麼?
- 10. TAG的價值是什麼?
- 11. rvalues的價值是什麼?
- 12. 'this'的價值是什麼?
- 13. 什麼是C/C++ #define的asp.net等價物?
- 14. 什麼是C/C++中#define的HTML等價物?
- 15. 什麼是#define NAME((LPCSTR)5)?
- 16. 這是什麼價值?
- 17. 什麼是價值投影?
- 18. 這是爲什麼按價值計價?
- 19. 什麼是#define字符串的類型?
- 20. 什麼是shell腳本中的DEFINE
- 21. #define中的##是什麼意思?
- 22. JavaScript中的define([,function])是什麼?
- 23. 「#define assert(exp)((void)0)」是做什麼的?
- 24. 「#define FOO(模板)」是做什麼的?
- 25. 爲什麼singletone類的價值是零?
- 26. 異常工廠的價值是什麼?
- 27. si的價值應該是什麼?
- 28. 什麼是價值1.0e + 1的類型
- 29. Collections.synchronizedList/synchronizedMap的真正價值是什麼?
- 30. 什麼是scaladocs的價值成員
沒有價值。在遇到該聲明後,XXX被預處理器簡單地認爲是*定義的。 – 2013-04-27 23:22:56