2016-07-08 3 views
0

J'ai écrit une application en utilisant Xcode (en C), qui repose fortement sur l'utilisation de nombres complexes. à savoir:C: nombres complexes dans Xcode et VS2015

#include <complex.h> 
... 

float a, b; 
complex float z; 
z = a + I * b; 

... etc 

Maintenant, cette notation pour les nombres complexes fonctionne très bien dans Xcode, et est la solution parfaite lors de la construction OS X versions compatibles de l'application. Cependant, maintenant j'ai besoin de construire une version de Windows, donc j'ai importé le même code dans Visual Studio 2015. Mais malheureusement, cette notation ne fonctionne pas, car l'implémentation de VS de nombres complexes est très différente. Et après avoir recherché mon problème, j'ai échoué à trouver des informations utiles sur la façon de gérer des nombres complexes de telle manière, à compiler avec succès sur les deux IDE.

Ceci est peut-être dû à ma mauvaise compréhension de cette norme C99 ou peut-être que ce n'est tout simplement pas possible. Mais, même si je pense que je pourrais réécrire le code C en utilisant la manière propre à VS de gérer des nombres complexes, ce ne serait pas idéal, car je prévois maintenant de développer davantage l'application pour les deux systèmes d'exploitation. Et il faudrait trop de temps pour écrire deux versions du même code en parallèle.

+0

Donc, vous utilisez un Oldtimer et se plaignent qu'il ne conduit pas aussi vite qu'une voiture de sport moderne. MSVC n'est pas conforme aux normes. Utilisez un compilateur compatible. – Olaf

+0

Copie possible de [support complexe C99 avec Visual Studio] (http://stackoverflow.com/questions/1063406/c99-complex-support-with-visual-studio). Tl, dr la meilleure façon que je pourrais penser est de remplacer tous les opérateurs et les types de données par des préprocesseurs définit/macors, puis implémenter votre propre gestion pour VS. – Groo

+0

Pouvez-vous utiliser C++? Je crois que le compilateur C++ de Visual Studio est plus conforme que leur compilateur C (si je me souviens bien, le compilateur VS C est toujours gelé à C90). Je ne sais pas comment il serait difficile de porter la version Mac en C++ (et le support de XCode en C++, mais je me doute que c'est bon). A défaut, vous pourriez essayer d'installer gcc sur Windows (voir http://mingw-w64.org/doku.php) et nous au lieu d'une plainte visuelle non-standard. – thurizas

Répondre

0

comme le montre: 'Compiling C code in Visual Studio 2013 with complex.h library'

_Dcomplex dc1 = {3.0, 2.0}; 

pour la déclaration variable. En regardant dans l'en-tête "complex.h" de VS2013, il semble que Microsoft ait décidé de sa propre implémentation pour les nombres complexes en C. Vous devrez mettre en œuvre vos propres opérateurs arithmétiques en utilisant le réel() et imag(), à savoir:

double real_part = real(dc1) + real(dc2); 
double imag_part = imag(dc1) + imag(dc2); 
_Dcomplex result = {real_part, imag_part}; 

Je doute que Microsoft a corrigé l'en-tête complex.h, vous devez examiner le fichier d'en-tête complex.h pour la détails pour les float types

+1

"leur propre implémentation pour les nombres complexes C" - S'ils l'ont fait à leur manière, ils ne sont pas des "nombres complexes en C". La norme C est claire sur la façon d'utiliser des nombres complexes, tout autre moyen n'est pas conforme. La bonne façon serait de détruire MSVC. – Olaf