Pointers 函数调用中结构到指针的自动转换
在我们的项目中,我们有一个非常普通的Pointers 函数调用中结构到指针的自动转换,pointers,structure,visual-studio-2003,abi,Pointers,Structure,Visual Studio 2003,Abi,在我们的项目中,我们有一个非常普通的printf样式函数,修改后的%g格式意味着打印GUID而不是普通的浮点类型。在我们的例子中,GUID如下所示: struct guid { uint32_t Data1; uint16_t Data2; uint16_t Data3; uint8_t Data4[8]; }; 实际上,print函数希望传递指向GUID的指针,而不是结构本身: struct guid myGuid = { 0x867FD1E7, 0x9AA7, 0
printf
样式函数,修改后的%g
格式意味着打印GUID而不是普通的浮点类型。在我们的例子中,GUID如下所示:
struct guid {
uint32_t Data1;
uint16_t Data2;
uint16_t Data3;
uint8_t Data4[8];
};
实际上,print函数希望传递指向GUID的指针,而不是结构本身:
struct guid myGuid = { 0x867FD1E7, 0x9AA7, 0x472A, { 0xAA, 0x56, 0xF2, 0xDA, 0x66, 0x62, 0xCD, 0x4D } };
print("%g", &myGuid);
但是,在源代码库中有几个位置,由于某些原因,会传递整个guid:
print("%g", myGuid);
这种调用风格似乎与MSVC2003配合得很好-是否存在某种ABI要求,使编译器转换该函数调用风格,以便在幕后实际传递指针?当将此代码库移植到使用clang/llvm时,它肯定不会做同样的事情
有人能解释一下为什么第二个版本的调用与MSVC一起工作吗?如能提供适当文档的指针,将不胜感激 我想我发现了一些关于: 任何不适合8字节或不是1、2、4或8字节的参数都必须通过引用传递
看来是时候修理一下叮当声了 我想我发现了一些关于: 任何不适合8字节或不是1、2、4或8字节的参数都必须通过引用传递 看来是时候修理一下叮当声了