8
votes

Signification de la déclaration de fonction

J'ai lu le fichier stdio.h et je suis confus.

Par exemple, il y a cette ligne: xxx p> Je sais fichier * signifie le type de retour et j'ai trouvé que _crtimp est constant, défini comme xxx p> i don 'T Comprenez-le, à quoi sert-il? Et qu'est-ce que le reste des chaînes ( __ cdecl , __ mingw_nothrow )?


0 commentaires

4 Réponses :


1
votes

__ DeclSpec (dllimport) indique au compilateur que cette fonction doit être importée à partir d'une DLL, c'est une extension spécifique à Windows. Voir Cette page pour plus de détails.

De même, __ CDECL est un attribut qui spécifie que la fonction utilise une convention d'appel particulière (nommément celle utilisée par c). Voir Cette page .

Je suppose que le __mingw_nothrow macro est un synonyme de l'attribut GCC NOTHROW , qui informe le compilateur que la fonction en question ne peut pas lancer d'exceptions. Voir le Documentation pour plus de détails.


0 commentaires

0
votes

Les thèses sont des déclarations spécifiques à l'environnement ou au compilateur que vous utilisez.

  • the __ beClSpec (dllimport) indique, sous Windows, que cette fonction est dans une DLL et doit être placée dans la table d'importation du fichier PE exécutable généré.
  • Le __ CDECL Indiquez une convention d'appel C standard C et modifiera la manière dont le compilateur transforme la fonction pour être conforme à cette convention appelante.
  • __ mingw_nothrow est spécifique à votre compilateur et pourrait désactiver la prise en charge de l'exception.

    Dans tous les cas, il doit y avoir une explication dans la documentation de votre compilateur.


0 commentaires

10
votes

__ DeclSpec (dllimport) Spécifie que la fonction doit être importée à partir d'une DLL distincte; Je suppose que, selon les paramètres de liaison statiques / dynamiques CRT, il est défini de différentes manières.

__ CDTECL est la convention d'appel utilisée pour la fonction; La convention appelante indique au compilateur comment la fonction s'attend à être appelée (dans laquelle les paramètres d'ordre sont enfoncés sur la pile, si un registre est utilisé pour les paramètres, où la valeur de retour est stockée, qui est responsable du nettoyage de la pile, ... ); En général, vous ne devriez pas m'en soucier tant que vous n'édentifoiez pas les bibliothèques.

__ mingw_nothrow est #define d pour étendre à __ attribut__ (((__Nothrow __)) , qui est une extension spécifique MingW qui indique à la compilateur que la fonction ne lancera pas d'exceptions; Cela permet au compilateur d'effectuer certaines optimisations.

Notez que tous ceux-ci ne sont pas des attributs C standard, mais des trucs spécifiques du compilateur / de la plate-forme. Encore une fois, en général, vous ne devriez pas vous inquiéter d'eux, ils sont tenus de faire fonctionner le CRT bien, mais aussi longtemps que vous ne construisez pas les bibliothèques, vous pouvez vous éloigner sans rien savoir d'eux. :)


0 commentaires

5
votes

Vous devez consulter _mingw.h et le manuel GCC < / a>: dans le cas de GCC - ou tout autre compilateur prenant en charge __ gnuc __ - Les définitions suivantes s'appliquent: xxx

Le premier indique au compilateur d'utiliser le CDECL x86 Convention d'appel ( Voir le manuel de la GCC ), ce dernier La fonction est garantie de ne pas lancer des exceptions c ++ ( Voir Manuel GCC ).

__ DeclSpec (dllimport) est nécessaire pour créer des travaux de liaison dynamiques ( Voir Manuel GCC ).


0 commentaires