美文网首页嵌入式软件程序员
C语言宏定义##和#符的使用总结

C语言宏定义##和#符的使用总结

作者: 华杰研习社 | 来源:发表于2018-07-12 18:06 被阅读13次

        最近在查找激光甲烷遥测仪有些主控板启动不了的原因时,顺便研究了TMS320VC5509A和STM32F407之间通过HPI接口的程序引导和利用CSL产生的HPI接口底层驱动程序,其中HPI接口底层驱动程序中使用了##连接符,现将C语言宏定义中的##和#符使用方法做一下总结:

1、#

1)、定义

        在C语言的宏定义中,#的功能是将其后面的宏参数进行字符串化操作,即是在对它所引用的宏变量进行替换后在其左右各加上一个双引号。

2)、实例

        比如下面代码中的宏:

#define WARN_IF(EXP)    do{ if (EXP)    fprintf(stderr, "Warning: " #EXP "/n"); }  while(0)

那么在实际使用中的替换过程为:假如:WARN_IF (divider == 0);

被替换过程为

do {

if (divider == 0)

fprintf(stderr, "Warning" "divider == 0" "/n");

} while(0);

这样每次divider(除数)为0的时候便会在标准错误流上输出一个提示信息。

3)、注意事项

(1)对空格的处理

忽略传入参数名前面和后面的空格。如:str=example1( abc ); 将会被扩展成 str="abc";

(2)当传入参数名间存在空格时,编译器将会自动连接各个子字符串,用每个子字符串中只以一个空格连接,忽略其中多余一个的空格。如:str=exapme( abc def); 将会被扩展成 str="abc def";

(3)转义字符

某些形式的传入参数名中,若存在特殊字符,编译器会自动为其添加转义字符号'\'。

如:string str=example1("escap'\e"); 相当于:str="\"escap\'\\e\"";

2、##

1)、定义

        在C语言的宏定义中,##被称为连接符,用来将两个Token连接为一个Token。

2)、实例

比如:#define LINK_MULTIPLE(a,b,c,d) a##_##b##_##c##_##d

typedef struct _record_type LINK_MULTIPLE(name,company,position,salary);

// 这里这个语句将展开为:

// typedef struct _record_type name_company_position_salary;

3)、注意事项

(1)当用##连接形参时,##前后的空格可有可无。

如:#define exampleNum(n) num ## n 相当于 #define exampleNum(n) num##n

(2)连接后的实际参数名,必须为实际存在的参数名或是编译器已知的宏定义。

相关文章

  • C语言宏定义##和#符的使用总结

    最近在查找激光甲烷遥测仪有些主控板启动不了的原因时,顺便研究了TMS320VC5509A和STM32F407之间通...

  • 预处理宏( Preprocessor Macros)

    C中的预处理宏宏定义就属于预处理命令的一种。宏:C 语言标准允许在程序中用一个标识符来表示一个字符串。标识符就是宏...

  • 单片机学习笔记10-C51中的简单宏定义

    宏定义语句属于C51语言的预处理指令,使用宏可以使变量书写简化,增加程序的可读性、可维护性和可移植性。宏定义分为简...

  • NSAssert 断言

    NSAssert 是c语言的一个宏定义。 看一下具体定义: 具体使用: NSAssert(condition, ...

  • C语言#define宏定义,你真的了解吗?

    在C语言中,我们使用#define来定义宏。在C程序编译的预处理阶段,预处理器会把宏定义的符号替换成指定的文本。 ...

  • c++基础(宏)

    有关 c++ 中宏的定义以及使用是今天的重点内容。 C++ 的宏定义将一个标识符定义为一个字符串,源程序中的该标识...

  • iOS - 《系统宏》宏,预处理命令

    在ios中使用预处理命令[C语言的特殊命令] 1.宏定义 #define 与 #undef 2.带参数宏定义 3....

  • 精解C语言预处理命令(三)之“宏”的用法二

    关于C语言带参数的宏定义中的参数 C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实...

  • SDWebImage源码解读

    整体架构 按照分组方式,可以分为几组 定义通用宏和方法 SDWebImageCompat: 宏定义和C语言的一些工...

  • 编程基础

    C语言 #define定义的宏和const定义的常量有什么区别? defined定义宏的指令,程序在预处理阶段将用...

网友评论

    本文标题:C语言宏定义##和#符的使用总结

    本文链接:https://www.haomeiwen.com/subject/noyrpftx.html