问题描述
|
我知道以下三个部分
#define
:
#define PI 3.4
这意味着它将用3.4
代替PI
。
但这就是“ 0”两部分的含义,如下所示:
#define something
它将用空/空字符串替换something
吗?
以下是代码示例,我搜索了文件,只列出了相关行
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)
解决方法
是的,这意味着用空字符串替换string6ѭ。但是重要的是,现在预处理器已经认识到“ 6”是“已定义”,因此
#ifdef something
将在“ 0”之后通过(第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
,这些声明通常在头文件中提供,以防止重复包含同一文件。这些也称为包括警卫队。
,#define something
将导致刚刚定义的结果。它不会导致编译器错误。通常像
void getValue(IN int& x,OUT int& y)
。如果你ѭ15
另一种用途是
#ifndef __ABC_H__
#define __ABC_H__
...
#endif
这是为了防止例如重新包含。 \“ abc.h \”
,它只不过是预处理器指令,“ 0”只是将头文件定向到所考虑的库文件中,或者可以声明常量。
,是的,它将空字符串替换为预处理器。它有助于自行编写代码,而无需写冗长的注释。