如何直接修改VA_LIST结构成员
How to directly modify va_list structure members?
如下所述,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的特定操作,但我的建议是找到另一种方法来做您要做的任何事情。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 包含 std::list 的结构体的 C++ 初始化
- 像 std::list<std::p air<string, string>> 这样的结构在返回时会被复制吗?
- 如何在结构的“std::list”中搜索
- 为什么 List 类必须包含 Node 结构作为私有成员C++
- 如何在std::list中插入一个新结构
- 类 "list" 包含包含类的结构
- 结构中的 std::list 导致内存冲突错误
- list pushback一个包含字符串类型核心的结构
- 使用char*和std::list将数据结构写入二进制文件
- 我可以使用“brace init list”初始化包含“std::string”字段的结构吗