這裏列出的兩個東西不經常使用,很容易忘記。其中含有可變參數的函數的部分來自CSDN論壇。
#include <string>
#include <stdarg.h>
using namespace std;
int foo(const int)
{
printf("int n ");
return 1;
}
void foo(int(*p)(int))
{
p(1);
printf("foo ");
}
void f(const char* str, ...)
{
va_list ap;
char* s = 0;
int d = 0;
double f = 0.0;
va_start(ap, str);
s = va_arg(ap, char*);
d = va_arg(ap, int);
f = va_arg(ap, double);
va_end(ap);
printf("%s, %s, %d, %f", str, s, d, f);
}
void main()
{
int(*p)(const int) = foo;
foo(p);
foo(p(1)); //注意這個調用和上面那個的區別
f("function", "varargs", 1, 1.0);
getchar();
}
執行結果爲:
int n
foo
int n
int n
function, varargs, 1, 1.000000
在無法列舉出傳遞給函數的所有實參的類型和數目時,可以使用省略符形參。省略符暫停了類型檢查機制。它們的出現告知編譯器,當調用函數時,可以有0個或多個實參,而實參的類型未知。兩種形式:
void foo(parm_list, ...); //逗號可選,這個規定很麻煩
void foo(...); //現在還不知道這種形式如何使用,待查。。。