zoukankan      html  css  js  c++  java
  • c语言的#和##的用法

    #include <stdio.h>
    
    #define ADD(A,B) printf(#A " + " #B " = %d
    ",((A)+(B)))
    #define XNAME(n) x ## n
    #define PRINT_XN(n) printf("x" #n " = %d
    ", x ## n)
    
    
    int main(void)
    {
    	ADD(4,5);
    
    	int XNAME(1) = 14;
    	PRINT_XN(1);
    
        return 0;
    }
    

      再次学习一下后两个还定义的小技巧,在vscode中可以把鼠标放到代码中,可以看到宏定义展开的最终结果。这个编辑器,值得推荐,我主打用他来写代码的。

    1、如果A是一个宏形参,那么#A就是转换为字符串"A"的形参名。这个过程称为字符串化(stringizing)

    2、与#运算符类似,##运算符可用于类函数宏(带参宏)的替换部分。##运算符可以把两个记号组合成一个记号。

     

    运行结果:

     ##运算符在这里看来并没有起到多大的便利,反而会让我们感觉到不习惯。但是,使用##运算符有时候是可以提高封装性及程序的可读性的。如跑实时操作系统的stm32程序中,关于gpio的硬件驱动中有如下代码:

    #define __STM32_PIN(index, gpio, gpio_index) 
    {
    index, GPIO##gpio##_CLK_ENABLE, GPIO##gpio, GPIO_PIN_##gpio_index 
    }

     

    假设这样使用该宏:

    __STM32_PIN(7, C, 13)

     

    该宏将展开为:

    {7, GPIOC_CLK_ENABLE, GPIOC, GPIO_PIN_13}
    然后这就可以很方便的将要使用的硬件引脚这么一一列出来,然后再拿去进行配置

     

  • 相关阅读:
    简单手风琴特效、轮播
    MVC
    文字自动下拉隐藏显示
    jQuery基础 DOM操作
    JQuery基础
    SQL 中的常用函数及使用
    数据库中的T-sql语句 条件修改 高级查询
    2017-03-09 数据库的基本东西
    C#中的冒泡排序
    C#中的数组
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12044617.html
Copyright © 2011-2022 走看看