187 votes

Ce qui est __declspec et quand dois-je utiliser ?

J’ai observé des cas de __declspec dans le code que je suis en train de lire. Qu'est-ce que c'est ? Et quand je dois utiliser cette construction ?

100voto

JaredPar Points 333733

Il s’agit d’une extension spécifique de Microsoft au langage C++ qui permet d’attribuer une fonction avec informations de classe de stockage ou type.

Documentation

68voto

Alexander Gessler Points 26717

Les exemples canoniques sont et , qui demander à l’éditeur de liens pour importer et exporter (respectivement) un symbole depuis ou vers une DLL.

( `` enveloppements justes des trucs spécifiques de Microsoft - pour assurer la compatibilité, on aurait habituellement envelopper loin avec macros)

27voto

AndiDog Points 28417

Il est principalement utilisé pour importer des symboles de / exporter des symboles à une bibliothèque partagée (DLL). Les compilateurs Visual C++ et de GCC appuient et . Autres utilisations (certaines Microsoft seule) sont décrits dans le site Web MSDN.

16voto

HackNone Points 164

Un autre exemple pour illustrer l' __declspec mot-clé:

Lorsque vous écrivez un Noyau de Windows Driver, parfois, vous voulez écrire votre propre prologue/épilogue séquences de code à l'aide de code assembleur en ligne, de sorte que vous pouvez déclarer votre fonction avec le nu de l'attribut.

__declspec( naked ) int func( formal_parameters ) {}

Ou

#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}

Veuillez vous référer à http://msdn.microsoft.com/en-us/library/h5w10wxs(v=vs. 80).aspx

9voto

Seva Alekseyev Points 31812

Essentiellement, c'est la façon dont Microsoft présente ses extensions C++, de sorte qu'ils ne seront pas en conflit avec les futures extensions de la norme C++. Avec __declspec, vous pouvez attribuer une fonction ou d'une classe; la signification exacte varie selon la nature de __declspec. __declspec(nu), par exemple, supprime le prologue/épilogue génération (pour les gestionnaires d'interruption, intégrable de code, etc), de __declspec(thread) en fait une variable locale de thread, et ainsi de suite.

La liste complète de __declspec attributs est disponible sur MSDN, et varie selon la version de compilateur et de la plate-forme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X