当只有2个部分时,#define的含义是什么?

mys*_*guy 3 c++

我知道以下3个部分#define:

#define PI 3.4
Run Code Online (Sandbox Code Playgroud)

这意味着它将取代PI3.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)