宏定义(define)和可变参数函数(variable arguments)

宏定义(define)和可变参数函数(variable arguments)

1,宏定义(define)

  • 宏定义是在编译时对程序进行文本替换,在宏定义替换过程中,只有字符串替换操作,没有运算操作
  • 宏定义分两种,一是普通的无参数宏定义;二是带实参的宏定义;

(1) 无参数宏定义

#define 宏名(标识符) 替换的文本

范例:

#define PI 3.14
double i = PI;
	--> 编译时,替换
        double i = 3.14;
#define N 5
#define NN N.123
double b = NN;
	--> 编译时,替换
        --> b = 5.123

(2) 有参数宏定义

#define 宏名(标识符) (参数列表) 替换文本
  • 由于宏是字符串替换,参数列表里面的参数都是字符串,故参数列表的参数是不带类型的参数,只代表一个替换字符串
  • 宏名代表了宏,无需带有参数列表
  • 替换文本知识被当做文本,进行指定字符串替换

范例:

#define MESSAGE(type) { printf("%s\n", type); }
MESSAGE("WARNING:\n");
	--> 编译时,替换
    {
    printf("%s\n", "WARNING:\n");}
		--> WARNING:

2,可变参数函数

    • 2
      点赞
    • 7
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    c语言中的宏函数是一种宏定义的形式,可以在编译预处理阶段通过替换来实现类似函数调用的功能。它不同于普通的函数调用,其主要特点是在宏定义时使用一些特殊的宏形参,这些宏形参可以包含可变参数可变参数是指宏函数在调用时可以传入不定数量的参数。在宏定义中,我们可以使用"..."来表示可变参数,且该参数必须放置在宏参数列表的最后。 通过宏定义中的可变参数,我们可以通过宏函数实现一些功能较为复杂的操作。比如,我们可以编写一个求和的宏函数,可以传入任意数量的参数,并对它们进行求和计算。例如: ``` #define SUM(...) sum(__VA_ARGS__) int sum(int count, ...) { int result = 0; va_list arg; va_start(arg, count); for(int i = 0; i < count; i++) { result += va_arg(arg, int); } va_end(arg); return result; } ``` 在使用可变参数的宏函数时,我们需要使用宏定义中的特殊宏形参,包括`va_list`、`va_start`、`va_arg`和`va_end`。`va_list`是一个用于存储可变参数的类型,`va_start`用于初始化可变参数的访问,`va_arg`用于按顺序获取可变参数的值,`va_end`用于结束对可变参数的访问。 总之,宏函数可变参数是C语言中非常有用的功能,可以通过它们来实现一些复杂的操作和功能。但需要注意的是,在使用可变参数时要小心,保证参数的正确性和合法性,以免出现错误。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值