如何使用# ## ... _ _VA_ARGS_ _

news/2024/12/3 7:55:39/

 1.#
假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).
#incldue <stdio.h>
#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 <stdio.h>
#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_ _)
PR("hello");-->printf("hello");
PR("weight = %d, shipping = $.2f",wt,sp);
    -->printf("weight = %d, shipping = $.2f",wt,sp);
省略号只能代替最后面的宏参数。
#define W(x,...,y)错误!

    


http://www.ppmy.cn/news/165119.html

相关文章

vala

根据百度百科的解释&#xff0c;vala是一种新的、为GNOME开发者提供的具有现代化编程语言功能的一种编程语言。 1. 安装 在ubuntu下安装很简单&#xff0c;使用命令sudo apt-get install valac-0.16&#xff08;12.04版本&#xff09;&#xff0c;测试valac编译器的版本号&…

VAE与CVAE

CVAE理论到代码 1. VAE的本质1.1 深度理解VAE1.2 VAE 与GAN 2. CVAE2.1 CVAE简介2.2 CVAE基本模型2.3 数学理解 参考 1. VAE的本质 1.1 深度理解VAE VAE本质就是在我们常规的自编码器的基础上&#xff0c;对encoder的结果&#xff08;在VAE中对应着计算均值的网络&#xff09;…

VQA

https://zhuanlan.zhihu.com/p/29688475 2017 VQA Challenge 第一名技术报告 张俊 2 天前 作者丨罗若天 学校丨TTIC博士生 研究方向丨NLP&#xff0c;CV 1. 前言 之前听 Chris Manning 讲过一个 talk&#xff0c;说他们复现别人的 paper&#xff0c;按照别人的算法写&#xff0…

# ## __VA_ARGS__ ##__VA_ARGS__的使用说明

程序开发或者看工程代码时可能在宏定义中有涉及到#、##、__VA_ARGS__和##__VA_ARGS__的使用&#xff0c;简单介绍下使用方法。 1、 #–将其后面紧跟的符号转换为字符串 #操作符是将其后面紧跟的符号变为字符串的形式&#xff0c;示例代码&#xff1a; #define PRINT_VAL(n, va…

AVA

声明&#xff1a;作者翻译论文仅为学习&#xff0c;如有侵权请联系作者删除博文&#xff0c;谢谢&#xff01; 论文链接&#xff1a;arXiv:1705.08421 [cs.CV] 《AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions》论文翻译 摘要介绍相关工作数据收…

va_list 、va_start、 va_arg、 va_end 使用说明

在ANSI C中&#xff0c;这些宏的定义位于stdarg.h中&#xff1a; typedef char *va_list; va_start宏&#xff0c;获取可变参数列表的第一个参数的地址&#xff08;list是类型为va_list的指针&#xff0c;param1是可变参数最左边的参数&#xff09;&#xff1a; #define va_…

#、##、__VA_ARGS__的使用

使用打印信息的接口时&#xff0c;经常见到__VA_ARGS__和##__VA_ARGS__这两个字符串&#xff0c;花时间学习下这部分的知识&#xff0c;发现还有#和##这两个比较有意思的字符串&#xff0c;记下他们的用法&#xff1a; #&#xff1a; 用来把参数转换成字符串&#xff1b; 例&a…

VA、RVA、FOA

PE 中涉及的地址有四类&#xff0c;它们分别是&#xff1a; 虚拟内存地址&#xff08;VA&#xff09;相对虚拟内存地址&#xff08;RVA&#xff09;文件偏移地址&#xff08;FOA&#xff09;特殊地址 要想了解这些概念&#xff0c;需要先简单地了解一下 32 位环境下 Windows …