首页 > 编程语言 >c++ 宏定义

c++ 宏定义

时间:2023-04-03 20:12:27浏览次数:39  
标签:elif 定义 c++ else ifdef ifndef define

#define 不被视为语言的一部分 Effective中有说明,宁可以编译器替换预处理器(尽量以 constenuminline 替换 #define)对于类似函数的宏,尽量使用内联函数替换掉#define

当然也有一些经常不得不用到的宏定义,比如c++中条件编译相关的预编译指令,包括 #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined。

#define 定义一个预处理宏
#undef 取消宏的定义

#if 编译预处理中的条件命令,相当于C语法中的if语句
#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef 与#ifdef相反,判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.
defined  与#if, #elif配合使用,判断某个宏是否被定义
例如:

#ifdef __cplusplus
extern "C" {
#endif

int add(int x, int y);

#ifdef __cplusplus
}
#endif

此处对 extern "C" { 及 } 做了条件编译,判断其是否是c++文件,若是c++文件则执行extern "C"特性,即用c语言特性将其分离编译。

 

参考文章:https://blog.csdn.net/weixin_43838785/article/details/122249174

标签:elif,定义,c++,else,ifdef,ifndef,define
From: https://www.cnblogs.com/Explosion556/p/17284231.html

相关文章

  • C++this指针
    C++只有非静态成员变量才属于类的对象上在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上首先看一下空对象占多少空间classFoo{};intmain(){Foofoo;cout<<"sizeofis:"<<sizeof(foo)<<endl;}结果为sizeofp=1;......
  • c++类型推导
    传统c和c++中,无论什么变量都应该先去声明其类型,指出其类型后才能进行下一步操作,这通常会花费很多无意义的时间。c++11引入了auto 和 decltype 这两个关键字实现了类型推导,让编译器来操心变量的类型。这使得C++也具有了和其他现代编程语言一样,某种意义上提供了无需操心变量类......
  • 设计模式(三十一)----综合应用-自定义Spring框架-自定义Spring IOC-定义解析器、IOC容
    3定义解析器相关类3.1BeanDefinitionReader接口BeanDefinitionReader是用来解析配置文件并在注册表中注册bean的信息。定义了两个规范:获取注册表的功能,让外界可以通过该对象获取注册表对象。加载配置文件,并注册bean数据。/***@versionv1.0*@ClassName:BeanDe......
  • c++运行时间记录
    chrono::steady_clock::time_pointt1=chrono::steady_clock::now();......chrono::steady_clock::time_pointt2=chrono::steady_clock::now();chrono::duration<double>time_used=chrono::duration_cast<chrono::duration<double>>(t2-t1);......
  • PL/SQL 基础---复杂数据类型和自定义类型
    原文地址:https://blog.csdn.net/villare/article/details/53437924PL/SQL基础—复杂数据类型和自定义类型PLSQL中常用的自定义类型就两种:记录类型、PLSQL内存表类型(根据表中的数据字段的简单和复杂程度又可分别实现类似于简单数组和记录数组的功能)除此之外,还有大对象类型:CLOB......
  • 对list中的字段进行自定义排序,最后放在LinkedHashMap中
    List<ProjectVO>projectList=dbProjectService.getProjectList();这里面如果第一个字段是如下的顺序:"成都分公司","北京分公司","上海分公司","深圳分公司","广州分公司","重庆分公司"Map<String,List<ProjectVO>>map=projectL......
  • 《c++徒步》基础语法篇
    trycatch原文链接:https://www.dotcpp.com/course/84语法结构:try{ //正常程序执行语句 throw(异常类型表达式);}catch(异常类型1){ //异常处理代码}catch(异常类型2){ //异常处理代码}catch(异常类型3){ //异常处理代码}//后续代码实例:#include<iostream......
  • linux下的c++filt 命令查找未定义符号的函数名
    我们知道,在C++中,是允许函数重载的,也就引出了编译器的namemangling机制,今天我们要介绍的c++filt命令便与此有关。   对于从事linux开发的人来说,不可不知道c++filt命令的使用。    在linux开发中,如果要调用基础模块库,就要包含对应的头文件,并在makefile中指......
  • Pycharm创建自定义代码片段
    简介PyCharm允许您创建自定义代码片段,也称为代码模板,以提高您的开发效率实现步骤1.添加代码模板打开PyCharm并导航到File->Settings,或者按快捷键ctrl+alt+s打开设置​按照如下序号步骤进行点击,点击“+”按钮以创建新的代码模板,选择LiveTemplate,此处可以看到很多pych......
  • C++17:新特性之std::optional
    考虑一个问题,C++如何实现返回多个值?如何标记其中一个bool返回值用于记录函数运行状态?我们可以通过pair或tuple实现,有以下代码:#include<iostream>#include<string>usingnamespacestd;structss{ strings; intsize;};pair<bool,ss>func2(conststring&in){......