C/C++ 不定長度參數

本篇介紹 C/C++ 的 variable length argument 不定長度參數用法,在某些情況下需要自己寫個能夠接受可變長度參數的函式,接下來文章內容會教你如何撰寫能夠接受可變長度參數 variable length argument 的函式。


要使用不定長度參數的話,需要引入的標頭檔: <stdarg.h>

C/C++ 不定長度參數的範例

範例中的 myprintf() 可以接受可變長度參數,可以接受一個參數也可以接受兩個參數,
甚至三個四個以上等等,就像 printf() 那樣使用~

基本上是由 va_start()va_end() 這兩個函式之間來處理所有的不定長度參數,
這個範例是將這些參數全部都格式化成字串 buf,讓稍後的 printf() 來輸出。

variable-length-argument
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// g++ cpp-variable-length-argument.cpp -o a.out -std=c++11
#include <stdio.h>
#include <stdarg.h>

void myprintf(const char* fmt, ...)
{
char buf[128];

va_list ap;
va_start(ap, fmt);
vsprintf(buf, fmt, ap);
va_end(ap);

printf("%s", buf);
}

int main(void)
{
myprintf("%d\n", 1);
myprintf("%d %d\n", 1, 2);
myprintf("%d %d %s\n", 1, 2, "Hello World");
return 0;
}

輸出如下,
可以看到 myprintf() 接受不同種參數長度的輸出結果~

1
2
3
1
1 2
1 2 Hello World

參考
variadic functions - Variable number of arguments in C++? - Stack Overflow
https://stackoverflow.com/questions/1657883/variable-number-of-arguments-in-c
va_start - C++ Reference
http://www.cplusplus.com/reference/cstdarg/va_start/
Variadic functions - cppreference.com
https://en.cppreference.com/w/cpp/utility/variadic
Variable Length Argument in C - GeeksforGeeks
https://www.geeksforgeeks.org/variable-length-argument-c/
具有變數引數清單的函式 (C++) | Microsoft Docs
https://docs.microsoft.com/zh-tw/cpp/cpp/functions-with-variable-argument-lists-cpp?view=msvc-160
C 語言:讓自己寫的 function 也能使用 … (不具名參數, 參數個數不確定) @ 傑克! 真是太神奇了! :: 痞客邦 ::
https://magicjackting.pixnet.net/blog/post/60401034

其它相關文章推薦
C/C++ 新手入門教學懶人包
C++ virtual 的兩種用法
C/C++ 字串反轉 reverse
C/C++ call by value傳值, call by pointer傳址, call by reference傳參考 的差別
C++ 類別樣板 class template
std::sort 用法與範例
std::find 用法與範例
std::queue 用法與範例
std::map 用法與範例