今天来说说宏.什么?宏也能可变参数?是的,你没有听错,带参数的宏和函数一样,同样支持可变参数.下面通过一个小程序加以说明.
#include <stdio.h>
#include <stdlib.h>
#define OUTSCREEN(msg, ...) printf(msg,__VA_ARGS__)
int main(int argc, char* argv[])
{
OUTSCREEN("Hello World!n%s", "__This is a MACRO!n");
return 0;
}
这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).
#define OUTSCREEN(msg, ...) printf(msg, __VA_ARGS__)
int main(int argc, char* argv[])
{
OUTSCREEN("Hello World!n%s", "__This is a MACRO!n");
return 0;
}
假如我们将上面的代码稍作一下修改,变成下面的样子.
#define OUTSCREEN(msg, ...) printf(msg, __VA_ARGS__)
int main(int argc, char* argv[])
{
OUTSCREEN("Hello World!");
return 0;
}
分享到:
相关推荐
在实际开发中,为了与标准C兼容,程序员应该确保在使用可变参数时提供必要的固定参数,以便为va_start宏提供正确的上下文信息。此外,虽然可变参数函数为处理不定数量参数提供了方便,但也应该谨慎使用,因为它们...
### C 语言中的宏、井号与可变参数详解 #### 宏的概述与使用 在C语言中,宏(Macro)是一种预处理指令,它允许开发者定义一系列文本替换规则,这些规则会在编译之前由预处理器进行处理。宏不是在程序运行时执行的...
1. 可变参数宏的定义: 在C99中,可以使用`...`来表示可变参数列表。当宏被调用时,这些可变参数会被一系列的参数值所替代。在宏定义中,可以使用`__VA_ARGS__`来引用这些可变参数。例如: ```c #define debug...
在C语言中,可变参数的实现基于调用约定(calling convention),通常涉及到两个关键函数:`va_start`、`va_end` 和一个宏 `va_list`。`va_list` 是一个类型定义,用于存储可变参数列表的指针;`va_start` 用于初始...
在C++中,可变参数通常与`va_list`,`va_start`,`va_arg`和`va_end`宏一起使用。这些宏提供了在运行时动态访问可变参数列表的能力。 3. **C#处理C++可变参数**:然而,C#本身并不支持可变参数,因此不能直接映射到...
C语言通过一组宏和一个类型来实现可变参数。这三个宏分别是`va_start`、`va_end`和`va_arg`,以及一个类型`va_list`。 - `va_start(ap, paramN)`:初始化可变参数列表。`ap`是用于存储参数列表的变量,`paramN`是...
#### 固定参数与可变参数对比 在C语言中,固定参数函数的参数类型和数量在函数定义时就已经确定。例如: ```c void fixed_args_func(int a, double b, char *c); ``` 在调用此类函数时,参数的传递顺序和类型是...
首先,C语言中的可变参数是通过`stdarg.h`头文件提供的宏和类型来实现的。这个头文件包含了一些关键的函数和类型定义,如`va_list`、`va_start`、`va_arg`和`va_end`,它们是处理可变参数的关键。 1. `va_list`:这...
这些宏定义在`stdarg.h`头文件中,因此编写可变参数函数时需要包含此头文件。 #### 宏定义解析 1. **`va_start`**: 初始化可变参数列表的迭代器。 - `void va_start(va_list arg_ptr, prev_param);` - 参数: -...
1. **固定参数与可变参数**:可变参数函数至少包含一个固定参数(如示例中的 `num`),用于指示可变参数的数量或作为其他用途。之后跟着的是一个省略号 `...`,表示可以有零个或多个可变参数。 2. **确定实参个数**...
在C语言中,实现可变参数的机制依赖于一组预定义的宏,它们定义在`stdarg.h`头文件中。这些宏包括`va_start`、`va_arg`和`va_end`。下面是它们的用途: 1. `va_start(arg_ptr, prev_param)`:这个宏用于初始化`va_...
可变参数宏的实现思想是使用省略号(...)来表示可变参数,然后使用 _VA_ARGS_ 来表示可变参数的替换部分。在宏定义中,我们可以使用可变参数来实现灵活的宏调用。 五、应用场景 可变参数宏在实际编程中有很多应用...
va_start宏用于初始化可变参数表,va_arg宏用于取得当前的可变参数,va_end宏用于结束可变参数的使用。 va_start宏的原型为:void va_start(va_list ap, prev_param),其中ap是指向可变参数表的指针,prev_param是前...
在C语言中,`printf`函数是一个典型的可变参数函数,它的强大之处在于可以接受任意数量和类型的参数,而不仅仅是固定数量的参数。这得益于C语言的变长参数列表机制,该机制允许函数定义时最后一个参数是可变的,但...
C语言提供了`stdarg.h`头文件,其中定义了一些用于处理可变参数的宏,如`va_list`, `va_start`, `va_arg` 和 `va_end`。 1. `va_list`:这是一个类型定义,用于定义一个变量,存储对可变参数列表的引用。 2. `va_...
这些宏定义在stdarg.h头文件中,它们允许函数访问可变数量的参数,这种处理方式通常被称为可变参数列表或可变参数宏。 在C语言中,实现参数个数可变的函数主要有两种形式,分别是ANSI标准形式和与UNIX System V兼容...
可变参数函数的核心是`stdarg.h`库,它提供了一些宏和类型,帮助我们在函数内部处理可变数量的参数。首先,我们需要包含这个头文件: ```cpp #include ``` 在C++中,为了定义可变参数函数,我们通常会有一个固定...
本文讨论了C语言中可变参数的用法,包括如何写一个简单的可变参数的C函数,如何使用可变参数宏va_start、va_arg和va_end,以及可变参数在编译器中的处理。 一、写一个简单的可变参数的C函数 在C语言中,某些函数...
在C语言中,可变参数列表的实现依赖于`stdarg.h`库中的宏和数据类型。要定义一个可变参数列表的函数,我们需要以下几步: 1. 定义一个固定参数列表,通常包含至少一个参数,用于确定函数调用的上下文。例如,这个...