Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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++ - Fatal编程技术网

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;
};