如here所述,va_list
类型的实现如下
typedef struct {
unsigned int gp_offset;
unsigned int fp_offset;
void *overflow_arg_area;
void *reg_save_area;
} va_list[1];
我可以直接修改
va_list
变量的结构成员吗?va_list ap;
ap[0].gp_offset = 123; // I want something like this
ap->gp_offset = 123; // but none of these compile
当我尝试运行此程序时,分别出现这些错误
error: request for member 'gp_offset' in 'ap[0]', which is of non-class type '__va_list_tag'
error: request for member 'gp_offset' in '*(__va_list_tag*)(& ap)', which is of non-class type '__va_list_tag'
我为什么要问?我正在使用大型数据库,并且看到了如下所示修改
va_list
变量的方法。我想知道是否可以在没有所有麻烦的情况下做到这一点。va_list ap;
// Mimic GCC data structure
typedef struct {
unsigned int gp_offset;
unsigned int fp_offset;
void *overflow_arg_area;
void *reg_save_area;
}va_list2[1];
char* ap2 = (char*)≈ // same address as ap
va_list2* ap3 = (va_list2*)ap2; // same address as ap
(*a3)->gp_offset = 123; // Now this is allowed!
最佳答案
该答案是针对C问题的,但即使从技术上讲,该答案也是错误的。
va_list是什么,在两种语言中均未定义。您也许可以执行特定于编译器/库/ ABI的操作,但是我的建议是找到另一种方法来执行您要执行的操作。