Quelle est la différence entre __atsortingbute __ ((__ packed__)); et pack #pragma (1)

Je porte un code qui fonctionne parfaitement sous Linux sur Windows Visual C ++. J’ai ce code sous Linux:

struct exif_desc { uint16_t tag; uint16_t type; uint32_t length; uint32_t value; } __atsortingbute__((__packed__)); 

Je reçois une erreur sur windows:

 '__packed__' : undeclared identifier 

Je me demande si je peux corriger cette erreur en utilisant

 #pragma pack(1) 

y a-t-il une différence entre eux? Existe-t-il une syntaxe pouvant être utilisée sous Linux et Windows pour cet atsortingbut?

__atsortingbute__ est une extension GCC, spécifique à GCC (et à d’autres compilateurs qui tentent d’être compatibles avec GCC).

#pragma pack est à l’origine une extension spécifique au compilateur Visual C ++. Comme indiqué par les commentateurs, il a également été implémenté dans GCC pour la compatibilité VC ++.

Normalement, vous ne pouvez pas utiliser des extensions dans un compilateur dans un autre compilateur. Cas: __atsortingbute__ n’existe pas en tant qu’extension dans le compilateur Visual C ++.