我知道以下3个部分#define:
#define PI 3.4
Run Code Online (Sandbox Code Playgroud)
这意味着它将取代PI有3.4.
但这就是这两个部分的含义#define:
#define something
Run Code Online (Sandbox Code Playgroud)
它会替换something为null /空字符串吗?
以下是代码示例,我搜索了文件,只列出了相关的行
D:\mariadb\storage\pbxt\src\cache_xt.cc (23 hits)
Line 172: #ifdef xtPublic
Line 173: #undef xtPublic
Line 188: #define xtPublic
Line 325: xtPublic XTIndHandlePtr xt_ind_get_handle(..)
Line 378: xtPublic void xt_ind_release_handle(XTIndHandlePtr..)
Line 516: xtPublic xtBool xt_ind_copy_on_write(XTIndReferencePtr iref)
Line 597: xtPublic void xt_ind_lock_handle(XTIndHandlePtr handle)
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 14
是的意思是something用空字符串替换.但重要的是现在something预处理器认识到它是"已定义"的,所以
#ifdef something
Run Code Online (Sandbox Code Playgroud)
之后会通过#define(第172行).
此外,通常将它用于配置或供应商特定的属性(第325行,......),如
#if MSVC
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
EXPORT void f();
// expand to '__declspec(dllexport) void f()' in MSVC
// expand to 'void f()' in other compilers
Run Code Online (Sandbox Code Playgroud)