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

时间:2011-05-25 08:46:36

标签: c++

我知道以下3个部分#define

#define PI 3.4

表示它会将PI替换为3.4

但这就是2部#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) 

5 个答案:

答案 0 :(得分:14)

是的意思是用空字符串替换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

答案 1 :(得分:1)

这些声明通常在头文件中给出,作为防止双重包含同一文件的方法。这些也称为include guards

答案 2 :(得分:1)

#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”

答案 3 :(得分:1)

它只是预处理器指令,#define只是将Header文件指向所考虑的库文件,或者可以声明常量。

答案 4 :(得分:1)

是的,它用空字符串替换预处理器。它有助于自我记录代码,而无需撰写冗长的评论。