参数列表在接受可变数量参数的 C 函数中重复传递
The parameter list is repeatedly passed in C function that accepts a variable number of arguments
我的OC代码是这样写的:
NSString * CMLocalizedString(NSString *key, ... ) {
va_list valist = NULL;
va_start(valist, key);
NSString* value = va_arg(valist, id);
va_end(valist);
NSLog(@"key = %@, val = %@", key, value);
return key;
}
int main(int argc, const char * argv[]) {
CMLocalizedString(@"SSS", nil);
CMLocalizedString(@"BBB", @"555", @"333", nil);
CMLocalizedString(@"AAA");
CMLocalizedString(@"CCC");
return 0;
}
但是我的控制台输出是这样的
key = SSS, val = (null)
key = BBB, val = 555
key = AAA, val = 555
key = CCC, val = 555
为什么 va_list
收到重复值?
您的函数 CMLocalizedString
需要第二个参数。在最后两个调用中,您没有传递第二个参数,因此您不能期望函数有某种行为。先前调用的参数似乎被打印来代替丢失的参数只是巧合,可能是因为仍然位于相同的内存地址。
我的OC代码是这样写的:
NSString * CMLocalizedString(NSString *key, ... ) {
va_list valist = NULL;
va_start(valist, key);
NSString* value = va_arg(valist, id);
va_end(valist);
NSLog(@"key = %@, val = %@", key, value);
return key;
}
int main(int argc, const char * argv[]) {
CMLocalizedString(@"SSS", nil);
CMLocalizedString(@"BBB", @"555", @"333", nil);
CMLocalizedString(@"AAA");
CMLocalizedString(@"CCC");
return 0;
}
但是我的控制台输出是这样的
key = SSS, val = (null)
key = BBB, val = 555
key = AAA, val = 555
key = CCC, val = 555
为什么 va_list
收到重复值?
您的函数 CMLocalizedString
需要第二个参数。在最后两个调用中,您没有传递第二个参数,因此您不能期望函数有某种行为。先前调用的参数似乎被打印来代替丢失的参数只是巧合,可能是因为仍然位于相同的内存地址。