美文网首页
c语言中#和##

c语言中#和##

作者: guanjianhe | 来源:发表于2017-12-02 22:01 被阅读0次

本文主要讲述c语言中#和##的用法

#

  • # 将右边的参数做整体的字符串替换。
  • 对于#的参数,即便是另一个宏,也不展开,仍然作为字符串字面信息输出。
#include<stdio.h>

#define dprint(expr) printf(#expr"=%d\n",expr); 

int main() 
{  
    int a=20,b=10;
    dprint(a/b);
    return 0; 
}

/*
   输出:a/b=2
 */

##

  • 将左右两边的参数做整体的字符串拼接替换。
  • 同#,对于##的参数,即便是另一个宏,也不展开,仍然作为字符串字面信息输出。
  • 经过##替换后的内容必须能够作为一个合法的变量
#define f(a,b) a##b
则
f(1,2) 替换拼接成12
f(i,1) 替换拼接称i1

以上f(i,1) 中,如果程序中没有i1的定义,则即便是通过了宏替换,也不能编译通过

#include <stdio.h>

#define f(a,b) a##b
#define g(a)  #a
#define h(a) g(a)
 
int main()
{
    int a2=3;
    //printf("%s\n",f(a,2));错误,没有a2的字符串变量 
    printf("%d\n",f(a,2));//正确 
    printf("%s\n", h(f(1,2)));
    printf("%s\n", g(f(1,2)));
    return 0;
}
/*输出
3
12
f(1,2)
*/

相关文章

  • c语言中#和##

    本文主要讲述c语言中#和##的用法 # # 将右边的参数做整体的字符串替换。对于#的参数,即便是另一个宏,也不展...

  • python关于&&和||的问题

    &&和||是多数高级语言中通用的逻辑运算符,表示并和或,诸如C语言、C++、JAVA等主流语言但是在python语...

  • C语言基础6

    结构体概述 1 在C语言中,结构体(struct)指的是一种数据结构,是C语 言中构造类型的其中之一。 2 在实际...

  • OC简介

    OC与C对比 1. 源文件对比 C语言中常见源文件.h头文件,.c文件.h 头文件,用于存放函数声明.c C语...

  • C++的输入和输出与标准输出流

    一、C++的I/O对C的发展—类型安全和可扩展性 C语言中I/O存在问题: 1、在C语言中,用prinff和sca...

  • C++ 输入输出(cin 和 cout)

    在 C 语言中,我们通常会使用 scanf 和 printf 来对数据进行输入输出操作。在C++ 语言中,C 语言...

  • C语言中的 * 和 &

    宏定义 1. 值拷贝 值拷贝:虽然赋值相同,但地址不同。 2. 指针拷贝 指针拷贝:p1和p2虽然是同一个对象,但...

  • C语言- 字符、字符数组

    字符数组和字符串 C语言中没有字符串这种数据类型,C语言中通过char型数组来替代字符串的功能。C语言中的字符串一...

  • c语言中static关键字用法详解

    概述 static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。 但是对于c语...

  • C语言位运算

    C语言位运算_C语言中文网 C语言位域(位段)_C语言中文网

网友评论

      本文标题:c语言中#和##

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