![](/img/trans.png)
[英]Android Studio NDK :: Error: Unknown type name '__va_list'
[英]Unknown chars in va_list?
#include <stdio.h>
#include <stdarg.h>
void s(const char* param, ...)
{
va_list arguments;
va_start (arguments, param);
const char* param_now = va_arg(arguments, const char*);
while(param_now != NULL)
{
printf("%s", param_now);
param_now = va_arg(arguments, const char*);
}
va_end (arguments);
}
int main()
{
s("one", "two");
return 0;
}
為什么我上面的代碼不起作用,並顯示未知符號而不是一個和兩個?
編輯 :找到了一種非常聰明的方法來避免在結尾處包含NULL:
void add_s(const char* param, ...)
{
return s(param, NULL);
}
您永遠不會用NULL參數終止您的序列,而while循環正在檢查該參數。
s("one", "two" , NULL );
現在只有“兩個”出現。 那是因為第一個字符串在參數param
。 因此,您必須先打印它,然后再打印所有可選參數。
您可以使用宏來避免編寫NULL終止符。 就像是:
#define my_s( ... ) s( __VA_ARGS__ , NULL )
注意,這需要在my_s
中至少有一個參數。 (並考慮避免在嚴肅的代碼中使用宏)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.