mkdir Windows vs Linux
J'ai un problème lors de portage de Linux l'outil de Windows. J'utilise MinGW sur un système Windows. J'ai une classe qui gère toutes les entrée/sortie et à l'intérieur se trouve cette ligne:
mkdir(strPath.c_str(), 0777); //works on Linux but not on Windows and when it is changed to
_mkdir(strPath.c_str()); //it works on Windows but not on Linux
Les idées de ce que je peux faire, de sorte qu'il fonctionne sur les deux systèmes?
vous pouvez trouver le système qui vous êtes et d'utiliser la bonne. quelque chose comme
Compilation conditionnelle?
Côté: - Vous dire à utiliser
Pourquoi une fonction c standard, conçu pour être portable, besoin d'un conditionnel macro si? N'est-ce pas tout l'intérêt d'avoir de la bibliothèque standard pour ne pas avoir besoin d'utiliser la macro si? Est la bibliothèque standard obsolète? Pourquoi n'avons-nous pas un brillant nouveau standard de la bibliothèque à supplanter les stdio et iostream et répondre aux usecases dans un portable?
#ifdef LINUX ... #else ... #endif
Compilation conditionnelle?
Côté: - Vous dire à utiliser
0777
, pas 777
. Ils sont très différents numéros.Pourquoi une fonction c standard, conçu pour être portable, besoin d'un conditionnel macro si? N'est-ce pas tout l'intérêt d'avoir de la bibliothèque standard pour ne pas avoir besoin d'utiliser la macro si? Est la bibliothèque standard obsolète? Pourquoi n'avons-nous pas un brillant nouveau standard de la bibliothèque à supplanter les stdio et iostream et répondre aux usecases dans un portable?
mkdir
pas un standard C de la fonction. C'est une norme Posix fonction. Les normes de Posix injecter des fonctions dans le runtime C, ce qui techniquement fait les en-têtes non-standard du point de vue de la norme C++. De nombreux unix hébergé par les compilateurs et les bibliothèques correspondantes de choisir de se conformer à la norme Posix, mais Microsoft choisit de se conformer à la norme C++. Donc, pour le sous-ensemble de fonctions Posix qu'ils fournissent, Microsoft ajoute les noms avec un trait de soulignement, faisant d'eux des "réservé pour le compilateur et les responsables de l'implémentation de la bibliothèque" comme la norme C++ permet.OriginalL'auteur MindlessMaik | 2012-04-27
Vous devez vous connecter pour publier un commentaire.
"_WIN32 Définis pour les applications Win32 et Win64". (réf: msdn.microsoft.com/en-us/library/b0084kay.aspx) Donc le vérifier _WIN64 n'est pas nécessaire ici.
Ne pourrait-il pas être
#if defined(_WIN32) || defined(_WIN64)
pour être valide? Il n'y a pas une telle chose comme#ifdef foo || bar
- il n'est pas valide préprocesseur syntaxe pour autant que je sais.Vous avez mal compris.
#ifdef constant_name
est valide.#ifdef foo || bar
ne l'est pas.#ifdef
ne pas prendre des expressions. Quel compilateur que vous utilisez qui accepte une telle syntaxe?_mkdir
est inclus avecdirect.h
dans Visual Studio, et n'existe pas dans GCC. Vous pouvez ajouter#ifdef _MSC_VER
#include <direct.h>
#endif
OriginalL'auteur gcochard
Vous devriez être en mesure d'utiliser la compilation conditionnelle pour utiliser la version qui s'applique à l'OS que vous compilez pour.
Aussi, êtes-vous vraiment sûr que vous voulez définir les indicateurs 777 (comme dans grand ouvert, merci de déposer votre virus ici)?
Vivre dangereusement! 😉
OriginalL'auteur Eric J.
Vous pouvez conditionnellement compiler avec quelques directives de préprocesseur, une jolie liste complète de qui vous pouvez trouver ici: Compilateur C/C++ Macros Prédéfinies
est défini dans windows 64 bits.
OriginalL'auteur wkl