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

问题描述

| 我知道以下三个部分
#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”只是将头文件定向到所考虑的库文件中,或者可以声明常量。     ,是的,它将空字符串替换为预处理器。它有助于自行编写代码,而无需写冗长的注释。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...