C++ va_arg将在clang和apple mac os x中溢出? #包括 #包括 无效打印(常量大小\u t n,…){ va_列表参数; va_启动(args,n); 对于(尺寸i=0;i > VisturGubI++i/i++是相同的。除了u想要获得值(++i)@ OZNOG,我为每个输入添加STATICECAST CAST,并且它被固定了。 #include <cstdarg> #include <iostream> void print(const size_t n, ...) { va_list args; va_start(args, n); for (size_t i = 0; i< n; ++i ) { auto v = va_arg(args, uint64_t); std::cout<< v << std::endl; } va_end(args); return; } int main() { print(6, 1,2,3,4,5,6); //print(5, 1,2,3,4,5); return 0; };
问题在于,C++ va_arg将在clang和apple mac os x中溢出? #包括 #包括 无效打印(常量大小\u t n,…){ va_列表参数; va_启动(args,n); 对于(尺寸i=0;i > VisturGubI++i/i++是相同的。除了u想要获得值(++i)@ OZNOG,我为每个输入添加STATICECAST CAST,并且它被固定了。 #include <cstdarg> #include <iostream> void print(const size_t n, ...) { va_list args; va_start(args, n); for (size_t i = 0; i< n; ++i ) { auto v = va_arg(args, uint64_t); std::cout<< v << std::endl; } va_end(args); return; } int main() { print(6, 1,2,3,4,5,6); //print(5, 1,2,3,4,5); return 0; };,c++,C++,问题在于,print函数假定参数作为uint64\u t传递。但是,当调用该函数时,您将值指定为整数文本,因此编译器将选择将其作为int传递 如果您将数字传递为1all、2ULL等,那么一切都应该正常。或者假设值是函数print中的int类型。请注意使用va_arg。编译器不会对类型不匹配发出警告,并且您可能会出现非常奇怪的行为。例如,如果您偶然发现s是一个类似于1.5的浮点值 既然你使用C++,变量模板可能更适合你的情况。为什么你认为类型是uTun64?t?改变你的循环到(sisixt i=0
print
函数假定参数作为uint64\u t
传递。但是,当调用该函数时,您将值指定为整数文本,因此编译器将选择将其作为int
传递
如果您将数字传递为1all
、2ULL
等,那么一切都应该正常。或者假设值是函数print
中的int
类型。请注意使用va_arg
。编译器不会对类型不匹配发出警告,并且您可能会出现非常奇怪的行为。例如,如果您偶然发现s是一个类似于1.5的浮点值
既然你使用C++,变量模板可能更适合你的情况。
为什么你认为类型是uTun64?t?改变你的循环到<代码>(sisixt i=0;i < n;i++)< /c> > VisturGubI++i/i++是相同的。除了u想要获得值(++i)@ OZNOG,我为每个输入添加STATICECAST CAST,并且它被固定了。#include <cstdarg>
#include <iostream>
void print(const size_t n, ...) {
va_list args;
va_start(args, n);
for (size_t i = 0; i< n; ++i ) {
auto v = va_arg(args, uint64_t);
std::cout<< v << std::endl;
}
va_end(args);
return;
}
int main() {
print(6, 1,2,3,4,5,6);
//print(5, 1,2,3,4,5);
return 0;
};