繁体   English   中英

当只有 2 部分时,#define 是什么意思?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM