VC ++中有_Complex语法的解决方法吗?

时间:2012-02-18 03:30:20

标签: visual-c++ mingw c99

我有一个用MinGW编译的库,它支持C99关键字,_Complex。我想将这个库与MSVC ++ 2010编译器一起使用。我试图暂时关闭所有_Complex语法代码,以便编译。我发现大多数其他功能在MSVC ++中运行良好。现在我想用_Complex定义启用部件,但实际上不知道如何。

显然我无法在MSVC ++中重新编译它,因为库要求C99功能等。但是,我觉得放弃它并寻找替代品是一种浪费,因为它与大多数其他功能完美配合

我想我可以编写需要_Complex语法的API包装器并用MinGW GCC编译它然后它就可以导入我的MSVC项目了。但是我仍然想知道这个问题是否有更好的解决方法,比如在VC ++中编译C99复数语法时人们处理问题的“标准”方式是什么?

1 个答案:

答案 0 :(得分:0)

来自C标准(C11§6.2.5¶13; C99的语言大致相同):

  

每个复杂类型都具有与数组相同的表示和对齐要求   类型恰好包含相应实数类型的两个元素;第一个要素是   等于复数的实部和虚部的第二个元素   号。

我面前没有C ++标准,但<complex>中定义的复杂类型模板具有相同的要求;这是为了兼容性。

因此,您可以重新编写C函数&amp;返回类型double _Complex的值作为C ++函数取&amp;返回std::complex<double>类型的值;只要关闭了C ++端的名称修改(通过extern "C"),双方都将兼容。

这样的事情可能有所帮助:

#ifdef __cplusplus
#include <complex>
#define std_complex(T) std::complex<T>
#else
#define std_complex(T) T _Complex
#endif