【发布时间】:2012-05-05 02:26:24
【问题描述】:
假设下面的头文件对应,例如一个共享库。导出的函数采用指向此标头中定义的自定义结构的指针:
// lib.h
typedef struct {
char c;
double d;
int i;
} A;
DLL_EXPORT void f(A* p);
如果共享库是使用一个编译器构建的,然后从另一个编译器构建的 C 代码中使用,则它可能无法正常工作,因为内存对齐方式不同,正如 Memory alignment in C-structs 所建议的那样。那么,有没有办法让我的结构定义在同一平台上的不同编译器之间移植?
我对 Windows 平台特别感兴趣(显然它没有明确定义的 ABI),但也很想了解其他平台。
【问题讨论】:
-
不,除非有人向你保证。
-
无重复。至少不是选择的问题。这个可以独立站立。
-
任何包含“结构对齐”字样的问题是否会自动与其他问题重复,即使它与它无关?...
-
建议的副本实际上回答了问题“是否保证结构内存对齐方式相同?” 就好了。不能保证,因为 c 标准允许每个编译器做出自己的选择。如果这里的主要问题是“我如何确保我的结构定义在同一平台上的不同编译器之间是可移植的?” 它应该更加突出。您应该尝试阅读相关编译器的文档。
-
@dmckee,感谢您的意见,我稍微改写了这个问题。
标签: c windows portability