博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言的宏macro的使用
阅读量:4493 次
发布时间:2019-06-08

本文共 1725 字,大约阅读时间需要 5 分钟。

C's Macro Introduction

1.The Connect Macros: ##

这是一个预处理连接符,这个操作符主要用来将两个符号连接成为一个完整的宏符号。通过下面的代码,可以看到其具体的使用方法:

  1. 如下例子:
#include 
struct macro{ int N; char M;};struct macro macro_drv = {100,20};#define XNAME(n) x##n#define Macro(x) x##_drv.Nint main(void){ char *XNAME(3) = "Hello,Macro(##)\n"; printf("%s",XNAME(3)); printf("The struct:%d\n",Macro(macro)); return 0;}
  1. 运行结果如下所示:
    Res

2.The Variadic Macros: ... and __VA_ARGS__

在某些函数当中,需要接收变化数量的参数,例如基本的printf函数。

我们可以通过将函数的最后一个参数定义为宏...,这样函数就可以使用预定义的宏__VA_ARGS__来表示变化数量的变量了。

  1. 如下例子:
#include 
#define PR(x,...) printf("Message" #x ":" __VA_ARGS__)#define VA(x,y,...) printf(#x" "#y" "#__VA_ARGS__)int main(void){ PR(1,"%s,%s\n","Hello","Macro"); VA(I,am,Superman!); return 0;}

上述程序中输入给PR函数的参数一共有4个:1,"%s,%s\n","Hello","Macro",第一个参数是保存在x形参中的,剩下的三个参数保存在__VA_ARGS__宏当中。

  1. 运行结果如下所示:
    772331-20190826203407290-1733127586.png

3.The Other Macros:__FILE__ __LINE__ __FUNCTION__

  1. 基本概念:
  • FILE:宏在预编译时会替换成当前的源文件名.
  • LINE:宏在预编译时会替换成当前的行号.
  • FUNCTION:宏在预编译时会替换成当前的函数名称.
  • TIME:在源文件中插入当前编译时间.
  • DATE:在源文件中插入当前的编译日期.
  1. Coding:
#include 
int main(void){ printf("The Source File Name:%s\n",__FILE__); printf("Current Code Line:%d\n",__LINE__); printf("Current Func Name:%s\n",__FUNCTION__); return 0;}
当程序在预编译过程当中,上述的三种宏就被替换成了对应的数值或者字符串了。
  1. 运行结果:
    772331-20190826212451755-1660111280.png

4.The FUNC Macro.

通常我们将某些简短的函数直接改写为宏定义,这就减少了我们在调用过程中的代码编写。

#define pi 3.14称作变量式宏定义,再如#define MAX(a,b) (a>b?a:b)称为函数时宏定义。具体例子如下:

  1. Codeing:
#include 
#define E 4#define PI 3.14#undef E // 将定义完成的宏撤销,可以重新定义一个名字叫E的宏.#define E 3#define MAX(a,b) ((a)>(b)?(a):(b))int main(void){ printf("The PI:%f\n",PI); printf("The Bigger:%f\n",MAX(PI,2.34)); return 0;}
  1. Result:
    Res

5.Reference

转载于:https://www.cnblogs.com/uestc-mm/p/11414798.html

你可能感兴趣的文章
Docker 安装及问题处理
查看>>
mysql 添加[取消]timestamp的自动更新
查看>>
码农的半衰期只有15年?
查看>>
2014-5-30 总结
查看>>
洛谷P1148 拱猪计分
查看>>
java笔记--适配器模式的运用
查看>>
jsp中${}是EL表达式的常规表示方式
查看>>
document
查看>>
Hadoop下大矩阵乘法Version2
查看>>
iPhone内存溢出——黑白苹果
查看>>
Struts2学习笔记(十二) 类型转换(Type Conversion)(下)
查看>>
tcpdump学习
查看>>
局域网内传输文件速度慢
查看>>
Linux的核心版本(摘抄)
查看>>
CASE表达式
查看>>
zkw线段树
查看>>
作业1226
查看>>
mainline.js主线
查看>>
fseek()
查看>>
Python学习笔记——PyQt控件中文字居中显示
查看>>