我有一个C#背景.我非常喜欢像C这样的低级语言.
在C#中,struct默认情况下由编译器布局内存.编译器可以隐式地重新排序数据字段或填充字段之间的附加位.因此,我必须指定一些特殊属性来覆盖此行为以获得精确布局.
AFAIK,C struct默认情况下不重新排序或对齐a的内存布局.但是,我听说有一个很难找到的例外.
什么是C的内存布局行为?什么应该重新订购/对齐而不是?
下面的代码在C中编译并运行得很好(至少根据'gcc -std = gnu99'),但它无法在C++下编译,给出"第5行:错误:无法将'double'转换为'double complex '初始化".有人知道为什么吗?
#include "/usr/include/complex.h"
#include <stdio.h>
int main(int argc, char * argv[]) {
double complex a = 3; // ERROR ON THIS LINE
printf("%lf\n", creal(a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我意识到在C++中有另一种复杂数字的方法,但是我必须在C++中使用C复数,因为这就是我给出的遗留代码所做的事情.谢谢,如果你能帮忙!