我知道以下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)
答案 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)
是的,它用空字符串替换预处理器。它有助于自我记录代码,而无需撰写冗长的评论。