Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Pointers 函数调用中结构到指针的自动转换_Pointers_Structure_Visual Studio 2003_Abi - Fatal编程技术网

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字节的参数都必须通过引用传递

看来是时候修理一下叮当声了