C/C++宏定义讲解

define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 使用宏时是简单的代码段替换.

#define的概念

简单的宏定义

#define <宏名>&#x3000;&#x3000;<字符串>
&#x4F8B;&#xFF1A; #define PI 3.1415926
</字符串></宏名>

注:使用简单的宏定义可以定义一些常量,区分 &#x7B80;&#x5355;&#x5B8F;&#x5B9A;&#x4E49;const valtype 的区别(优先使用const)

带参数的宏定义(宏函数)

#define <宏名> (<参数表>) (<宏体>)
&#x4F8B;&#xFF1A; #define Max(a, b) ( (a)>(b) ? (a) : (b))
</宏体></参数表></宏名>

注:简单代码段使用宏函数比使用函数好,免去了函数调用的开销,提高运行效率

宏的使用情形

  1. 头文件包含
    把源程序中的#include 扩展为文件正文,即把包含的.h文件找到并展开到#include 所在处
  2. 条件编译
    预处理器根据 #if#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外,通常把排除在外的语句转换成空行
  3. if 命令

#if &#x6574;&#x578B;&#x5E38;&#x91CF;&#x8868;&#x8FBE;&#x5F0F;1
    &#x7A0B;&#x5E8F;&#x6BB5;1
#elif &#x6574;&#x578B;&#x5E38;&#x91CF;&#x8868;&#x8FBE;&#x5F0F;2
    &#x7A0B;&#x5E8F;&#x6BB5;2
#elif &#x6574;&#x578B;&#x5E38;&#x91CF;&#x8868;&#x8FBE;&#x5F0F;3
    &#x7A0B;&#x5E8F;&#x6BB5;3
#else
    &#x7A0B;&#x5E8F;&#x6BB5;4
#endif
  • ifdef

#ifdef  &#x5B8F;&#x540D;
    &#x7A0B;&#x5E8F;&#x6BB5;1
#else
    &#x7A0B;&#x5E8F;&#x6BB5;2
#endif
  1. 宏展开
    预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义,即本文所说的 #define的功能,由预处理器来完成,这里是单纯的替换与展开
  2. 避免头文件重复引用
#ifndef INCLUDE_NAME_H
#define INCLUDE_NAME_H
    //&#x5934;&#x6587;&#x4EF6;&#x5185;&#x5BB9;
#endif

define中的三个特殊符号: #&#xFF0C;##&#xFF0C;#@

#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x
  • x##y表示x连接y, 如 int n = Conn(123,456); // &#x7ED3;&#x679C;&#x5C31;&#x662F;n=123456;
  • #@x表示给x加单引号, 如 char a = ToChar(1); //&#x7ED3;&#x679C;&#x5C31;&#x662F;a='1';
  • #x表示给x加双引号, 如 std::string str = ToString(12345); //&#x7ED3;&#x679C;&#x5C31;&#x662F;std="12345";

Original: https://www.cnblogs.com/CJuncheng/p/16492467.html
Author: CJuncheng
Title: C/C++宏定义讲解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/712713/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球