小编con*_*sed的帖子

c ++ va_arg类型转换问题

所有,

我正在编写一个小型的c ++应用程序并且被这个问题困扰了.如果不期望元素类型,有没有办法在使用va_arg从va_list宏访问元素时创建(以及稍后捕获)错误.例如:-

count=va_arg(argp,int); 
if (count <= 0 || count > 30)
{   
      reportParamError();   return;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我传递的是typedef而不是int,我会在MS编译器上获得垃圾值,但95%的时间计数在gcc上获得值0(在64位sles10 sys上).有没有办法可以执行一些类型检查,以便我得到一个可以在catch块中捕获的错误?

任何有关这方面的想法对我都非常有帮助.或者有更好的方法来做到这一点.功能原型是: -

 void process(App_Context * pActx, ...) 
Run Code Online (Sandbox Code Playgroud)

该函数被称为

 process(pAtctx,3,type1,type2,type3);
Run Code Online (Sandbox Code Playgroud)

pActx必须作为第一个参数传递,因此不能将计数作为第一个参数传递.


更新1

好吧,这听起来很奇怪,但是在sles10 gcc上,nargs似乎不属于va_list.我不得不投入

#ifdef _WIN32
tempCount=va_arg(argp,int)
#endif
Run Code Online (Sandbox Code Playgroud)

使用它之后,下面的参数不会得到垃圾值.但是,这引入了基于编译器/平台的#ifdefs ....感谢Chris和Kristopher

c++ variadic-functions

2
推荐指数
1
解决办法
891
查看次数

C struct-to-struct赋值 - 目标结构中的值不正确

我在头文件中有ac结构: -

typedef struct sample
{
char *member1;
char **member2;
long *member3;
unsigned int member4;
} example;
Run Code Online (Sandbox Code Playgroud)

我在同一个头文件中声明了一个默认的typedef变量: -

const example defaultValue;
Run Code Online (Sandbox Code Playgroud)

defaultValue的定义在c文件中: -

const example defaultValue = 
{
NULL,
NULL,
NULL,
99
};
Run Code Online (Sandbox Code Playgroud)

现在在一个不同的c文件中,如果我这样做,

example example1 = defaultValue;
Run Code Online (Sandbox Code Playgroud)

所有成员都按预期分配NULL - 但是"unsigned int member4"被赋值为0而不是99.这很奇怪,因为defaultValue.member4是99.有人可以解释一下这种不寻常的行为吗?有没有更好的方法来进行默认的struct初始化?

c structure variable-assignment

0
推荐指数
1
解决办法
592
查看次数