Je suis nouveau à c et j'ai reçu un code source que quelqu'un d'autre a écrit qui a été compilé sous Windows.
Après avoir essayé de faire en compilée sur Linux, j'ai des erreurs car Linux ne prend pas en charge Dword, mot et uint32. J'ai 6 fichiers par exemple. A.H, A.C, B.H, B.C, C.H, C.C. Ces mots-clés sont dans tous les fichiers. P>
Je pense donc à 2 solutions possibles. Qui est meilleur #define ou typé. p>
1) p> 2) p> pour la deuxième partie que je me demande où devrait Je mets ces déclarations. Devraient-ils aller dans les fichiers d'en-tête ou devraient-ils aller dans les fichiers source? P> Par exemple, dois-je faire quelque chose comme celui-ci dans les fichiers d'en-tête ou dans les fichiers source? P> #ifdef WIN32
/* windows stuff */
#else
typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef unsigned int UNINT32;
#endif
4 Réponses :
Vous avez trouvé la solution vous-même:
#ifdef WIN32 /* windows stuff */ #else typedef unsigned long DWORD; typedef unsigned short WORD; typedef unsigned int UNINT32; #endif
Battez-moi à cela .. c'est ce que je reçois pour la frappe lente
Si vous souhaitez gérer la compilabilité de la plate-forme croisée, vous voudrez peut-être simplement le mettre dans un fichier nommé Windows.h que vous gardez dans un emplacement standard, car c'est le fichier sous Windows qui vous obtient ces déclarations.
Si la machine a long = 8 (64 bits de machines), utilisez Typedef non signé INT DWORD.
Typedfs sont définitivement plus gentils. #defines sont des macro du préprocesseur et peuvent avoir des conséquences inattendues, car fondamentalement, le pré-processeur C remplit une recherche globale-et-remplacement pour définir. Typedfs sont des instructions sur le compilateur et bien mieux adaptées à ce que vous voulez faire. P>
typlef serait mieux dans ce cas car #define est juste un mécanisme générique, mais Typedef est pour définir des types qui est ce que vous faites.
Je dirais mettre votre code: p>
#ifdef WIN32 /* windows stuff */ #else typedef unsigned long DWORD; typedef unsigned short WORD; typedef unsigned int UNINT32; #endif
L'utilisation d'un typeDEF tourne le résultat dans un type réel qui se met dans l'arborescence de la syntaxe. (En d'autres termes, les compilateurs le savent et le reconnaît comme une partie de la langue.)
Pour votre cas, je recommanderais probablement TEPDEF. #define a sa place, mais je ne vois aucune raison pour que vous ne voudrais pas utiliser typlef ici. p> Sachez que d'autres bibliothèques ont peut-être défini ces types. Vous pouvez donc avoir des collisions. Si vous voulez vraiment être multiplate-forme, vous pouvez penser à définir des types avec l'espace de nom de votre application en quelque sorte. Comme P> #define code>, en revanche, est juste une substitution de texte. Donc, le compilateur ne fait jamais savoir à ce sujet, cela voit plutôt tout ce que c'est que cela est substitué. Cela peut rendre la recherche d'erreurs compilez plus fort. P> myapp_dword
myapp_word
Bonjour. Lorsque vous dites des typons définis dans la langue et dans la bibliothèque standard C. Devrais-je changer tout le DWORD, Word et UINT32 pour être non signé longtemps, non signé et non signé INT. Au lieu d'utiliser le DWORD, WORD, etc. est-ce parce que ces types fonctionneront sur Windows et Linux? Merci beaucoup.
Oui, généralement c'est ce que je dis. Toutefois, la bibliothèque C standard définit également des types de garanties spécifiques sur la plage. Taille_T est un bon exemple d'un tel type.