1.#

假如希望在字符串中包含宏参数,ANSI

C允许这样作,在类函数宏的替换部分,#符号用作一个预

处理运算符,它可以把语言符号转化程字符串。例如,如

果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).

#incldue

#define PSQR(x) printf("the square of" #x "is

%d./n",(x)*(x))

int main(void)

{

int y =4;

PSQR(y)

PSQR(2+4);

return 0;

}

输出结果:

the square of y is 16.

the square of 2+4 is 36.

第一次调用宏时使用“y”代替#x;第二次调用时用“2+4"代#x。

2.##

##运算符可以使用类函数宏的替换部分。另外,##还可以用于类对象宏的替换部分。这个运算符把两

个语言符号组合成单个语言符号。例如:

#define XNAME(n) x##n

这样宏调用:

XNAME(4)

展开后:

x4

程序:

#include

#define

XNAME(n) x##n

#define PXN(n) printf("x"#n" =

%d/n",x##n)

int main(void)

{

int XNAME(1)=12;//int x1=12;

PXN(1);//printf("x1 = %d/n", x1);

return 0;

}

3.可变宏 ...和_ _VA_ARGS_ _

实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_

_就可以被用在替换部分中,以表示省略号代表什

么。比如:

#define PR(...) printf(_

_VA_ARGS_ _)

#define PR(...) printf(_ _VA_ARGS_ _)

PR("hello");-->printf("hello");

PR("weight = %d, shipping = $.2f",wt,sp);

-->printf("weight = %d, shipping =

$.2f",wt,sp);

省略号只能代替最后面的宏参数。#define W(x,...,y)错误, VC6.0不支持 VS2005支持

c语言 宏 不定参数,C宏定义不定参数相关推荐

  1. python函数不定参数_python如何定义不定参数函数

    *args,可以传入任意多个参数 **args,以字典形式传入任意多个参数 元组形式: 1.定义函数 def test1(*args): print('################test1### ...

  2. 宏定义有无参数宏定义和带参数宏定义两种

    宏定义有无参数宏定义和带参数宏定义两种. 无参数的宏定义的一般形式为 # define 标识符 字符序列 其中# define之后的标识符称为宏定义名(简称宏名),要求宏名与字符序列之间用空格符分隔. ...

  3. java 不定参数方法_java中不定长参数的使用方法

    java中不定长参数的使用方法 不定长参数方法的语法如下:返回值 方法名(参数类型...参数名称) 在参数列表中使用"..."形式定义不定长参数,其实这个不定长参数a就是一个数组, ...

  4. python函数参数定义顺序_18 Python - 函数定义与参数

    12 函数定义与参数 01函数 (1)定义: def 函数名(参数1,参数2--): 函数体 return 结果 (2)调用: 函数名(实际参数) (3)函数作用: 最大化代码重用, 最小化代码冗余, ...

  5. mysql宏参数_C语言带参数的宏定义

    C语言允许宏带有参数.在宏定义中的参数称为"形式参数",在宏调用中的参数称为"实际参数",这点和函数有些类似. 对带参数的宏,在展开过程中不仅要进行字符串替换, ...

  6. c 语言 宏 可变 参数,利用C可变参数和宏定义来实现自己的日志系统

    在嵌入式应用的开发过程中,日志系统是非常重要的! 特别是在生产环节出现了偶发性的.与当前的执行环境相关的bug的时候, 如果没有日志系统来追踪问题,很难进行问题重现. 因此,实现一个自己的日志系统是很 ...

  7. C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策

    一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...

  8. 【C语言】宏定义(不带参数的宏定义和带参数的宏定义)

    目录 一.不带参数的宏定义 1.定义 2.#undef 指令取消宏定义 二.带参数的宏定义 1.定义 2.宏定义参数替换的注意事项 三.带参数的宏定义和带参函数的区别 一.不带参数的宏定义 1.定义 ...

  9. c语言宏定义可变参数,C语言可变参数宏定义方法

    http://blog.csdn.net/skyflying2012/article/details/38436711 2014 在GNU C中,宏可以接受可变数目的参数,就象函数一样,例如: 1 2 ...

最新文章

  1. 如何成为一个优秀的程序员
  2. android列表勾选框,android listview实现复选框列表
  3. R语言dplyr包arrage函数排序dataframe实战:单列排序、多列排序、自定义排序
  4. 让DJANGO里的get_success_url定义的reverse_lazy带参数跳转
  5. Java文件流输入输出
  6. pyecharts中管理工具按钮以及修改图表主题
  7. 单片机sleep函数的头文件_关于PIC单片机SLEEP指令
  8. Python Web 框架-Django day06
  9. 双系统linux分区扩容,Win7 下Ubuntu14.04 双系统无损扩容
  10. python——识别真实键盘按下模拟键盘按下
  11. 测试之全流程质量保证
  12. 仿知乎客户端的白天黑夜主题切换
  13. php图片不显示怎么处理,如何解决php图片因存在错误而无法显示
  14. 让人眼花缭乱的视错觉,太酷炫了!
  15. ORA-01029,ORA-01033错误处理
  16. JSON转换JAVA对象
  17. 在线计算机长度,长度单位在线换算器
  18. 【rmzt:动漫俺修罗酷爱主题】
  19. 使用Python玩转ROS2参数
  20. Android打开WIFI、关闭WIFI、检测当前WIFI状态

热门文章

  1. 华硕fl5900u屏幕怎么拆_15寸高清影音 华硕FL5900U笔记本评测
  2. 物联网——zigbee(cc2530)
  3. FOFA模糊搜索的正确姿势
  4. 阿里有群姑娘,是马老师的师兄,还是逍遥子的学长……
  5. 比较出名的导航类网站
  6. 职场英语--邮件自动回复模板
  7. (心得一)java俄罗斯方块小游戏编写心得
  8. scrt如何切换成英文版_CRT中英文对照表
  9. 学业计算机水平考试试题,信息技术学业水平考试试题
  10. 全国个别城市ID代码