[英]What's the meaning of #define when there is only 2 part?
我知道以下 3 个部分#define
:
#define PI 3.4
这意味着它将用PI
替换3.4
。
但这就是像这样#define
的两部分的含义:
#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)
是的,这意味着用空字符串替换something
内容。 但重要的是现在预处理器识别something
它是“定义”的,所以
#ifdef something
将在#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
这些声明通常在 header 文件中给出,以防止重复包含同一文件。 这些也称为包含守卫。
#define something
会导致刚刚定义的东西。 它不会导致编译器错误。 它通常像这样使用
void getValue(IN int& x, OUT int& y)
。 如果你执行#define IN and #define OUT it will not give a compiler error and anybody will get to know x is input and y is output
另一种用途是
#ifndef __ABC_H__
#define __ABC_H__
...
#endif
这是为了防止重新包含例如。 “abc.h”
它只是预处理器指令,#define 只是将#define
文件定向到所考虑的库文件或可以声明常量。
是的,它用空字符串替换了预处理器。 它有助于自我记录代码而无需编写冗长的注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.