दिलचस्प पोस्ट
TensorFlow में पूर्व-प्रशिक्षित शब्द एम्बेडिंग (वर्ड 2 एवीसी या ग्लॉव) का उपयोग करना जावा में क्लिपबोर्ड पर कॉपी करना JQuery प्लगइन्स का उपयोग करना जो कि डीओएम को रिएक्शन कॉम्पोनेंट्स में बदलता है? जावा में डीकोड बेस64 डेटा सीएसएस: नहीं () चयनकर्ता को दूर के वंशज के साथ काम करना चाहिए? OpenCV 2.4.3 आईओएस ढाँचा कंपाइलर कुछ सी + हेडर पहचानने में परेशानी एक <चयन करें> jQuery का उपयोग करने के लिए विकल्प जोड़ना? सीएसआरएफ हमलों के खिलाफ प्रवेश फार्मों की आवश्यकता है? GoogleApiClient फेंक रहा है "GoogleApiClient अभी तक कनेक्टेड नहीं है" अस्थायी लाइफटाइम ExpireTimeSpan को पुनर्जन्म करने के बाद की उपेक्षा की गई IDentity / MVC पहचान में मान्य अवधि (2.0.1) React.js में स्क्रॉल पर एक घटक की शैली को अद्यतन करें जावास्क्रिप्ट: ईवेंट श्रोता को हटा दें ऐप ट्रांसपोर्ट सुरक्षा के द्वारा किस URL को अवरुद्ध किया जा रहा है, मैं यह कैसे पता लगा सकता हूं? अगले इनपुट पर ध्यान केंद्रित (jquery)

विजुअल C ++ जीसीसी के __त्तात्व__ के बराबर ((__ पैक्ड__))

कुछ कंपाइलर के लिए, स्ट्रक्क्ट्स के लिए एक पैकिंग स्पेसिफायर है, उदाहरण के लिए:

 RealView एआरएम संकलक "__ पैकेट" है
 ग्नू सी कंपाइलर में "__त्तात्व__ ((__ पैक्ड__) है"
 विजुअल सी ++ के पास कोई समतुल्य नहीं है, इसमें केवल "#प्रगमा पैक (1)" है

मुझे कुछ चाहिए जो मुझे संरचना की परिभाषा में डाल सकें

कोई जानकारी / हैक / सुझाव? TIA …

Solutions Collecting From Web of "विजुअल C ++ जीसीसी के __त्तात्व__ के बराबर ((__ पैक्ड__))"

मुझे यह करने का एक चालाक तरीका नहीं पता, लेकिन संभवतः आप ऐसा कुछ भयानक काम कर सकते हैं:

 #include "packed.h" struct Foo { /* members go here */ } PACKED; #include "endpacked.h" 

फिर एमएसवीसी के लिए, packed.h:

 #define PACKED #pragma pack(push,1) 

endpacked.h

 #pragma pack(pop) #undef PACKED 

जीसीसी के लिए, packed.h:

 #define PACKED __attribute__ ((__packed__)) 

endpacked.h:

 #undef PACKED 

मौलिक रूप से, पैकिंग भी मंच पर निर्भर है। मान लीजिए कि आपके पैक वाले संरचना में 8-बिट फ़ील्ड हैं, और 16-बिट बाइट के साथ कुछ सिस्टम पर विचार करें। यह आपके डेटा को पैकिंग के द्वारा प्रदर्शित करने वाला एक संरचना नहीं हो सकता – आपको यह जानना होगा कि 8-बिट बाइट्स को 16-बिट बाइट्स में कनवर्ट किया जाता है, जब दो सिस्टम के बीच स्थानांतरित किया जाता है। 16 बिट मशीन पर स्ट्रेट को बिटफ़ेल्ड की आवश्यकता हो सकती है, इस स्थिति में आपको यह जानना होगा कि कार्यान्वयन कैसे उन्हें बाहर रखता है।

इसलिए यदि कोड का उद्देश्य आम तौर पर पोर्टेबल होना है, तो आपको अपनी हेडर फ़ाइल के किसी प्लेटफॉर्म-विशिष्ट अनुभाग में जो भी पैक की गई संरचनाओं को परिभाषित करना होगा। या बल्कि, अपने कोड को व्यवस्थित करें ताकि एक भावी पोर्ट ऐसा कर सकें, अगर उसे करना है

आप इस तरह से पैन को जीएनयू जीसीसी के लिए परिभाषित कर सकते हैं

 #define PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__)) 

और दृश्य सी ++ के लिए इस तरह:

 #define PACK( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop) ) 

और इसे इस तरह प्रयोग करें:

 PACK( struct myStruct { int a; int b; }); 

मुझे पता है कि यह प्रश्न पुराना है, लेकिन मेरा मानना ​​है कि पहले पोस्ट किए गए लोगों की तुलना में बेहतर समाधान है। एमएसवीसी मामले में प्रामाणिकता को सभी के बाद संरचना घोषणा रेखा में रखा जा सकता है। निम्नलिखित को धयान मे रखते हुए:

 #ifdef _MSC_VER # define PACKED_STRUCT(name) \ __pragma(pack(push, 1)) struct name __pragma(pack(pop)) #elif defined(__GNUC__) # define PACKED_STRUCT(name) struct __attribute__((packed)) name #endif 

तो इसका उपयोग इस प्रकार किया जा सकता है:

 typedef PACKED_STRUCT() { short a; int b } my_struct_t; PACKED_SRUCT(my_other_struct) { short a; int b }; 

आदि।

यहां कुंजी यह है कि __प्रज्ञ का उपयोग केवल संरचना की घोषणा रेखा के आसपास होना चाहिए। यह संरचना नाम शामिल करने की आवश्यकता है अगर यह एक दिया गया है, इसलिए मैक्रो के लिए एक पैरामीटर नाम है बेशक, Enum / class तक विस्तार करना आसान है, जो मैं पाठक को एक अभ्यास के रूप में छोड़ दूँगा!

पैक दस्तावेज़ीकरण एमएसडीएन पृष्ठ पर परीक्षण कार्यक्रम यह सत्यापित करने के लिए उपयोगी है।

संपादित करें

यह मेरे परीक्षण में पता चला है कि मैं विंडोज पर इंटेल कंपाइलर का उपयोग कर रहा था। आईसीएल.एक्सई का उपयोग इस समस्या को बिना किसी समस्या के काम करता है, लेकिन माइक्रोसॉफ्ट कंपाइलर (सीएल। एक्सई) के साथ, यह (2010 और 2013 के साथ परीक्षण नहीं)

एक अन्य समाधान, यह निर्भर करता है कि आप किस आधार पर कंपाइलर्स का समर्थन करना चाहते हैं, यह ध्यान देना चाहिए कि जीसीसी ने माइक्रोसॉफ्ट-स्टाइल पैकिंग प्रोगामा को कम से कम संस्करण 4.0.4 (ऑनलाइन प्रलेखन gnu.org पर संस्करण 3.4.6 और 4.0.4 के लिए उपलब्ध है – प्रगामाओं को पूर्व में वर्णित नहीं किया गया है और बाद में हैं)। यह आपको परिभाषा के बाद #pragma pack(push,1) संरचना की परिभाषा के पहले और #pragma pack(pop) करने देता है और यह या तो में संकलन करेगा।

जीसीसी वीसी + + पैक संबंधित प्रगामाओं का समर्थन करता है, क्योंकि आप इसे दूसरे तरीके से गोल कर सकते हैं। अधिक जानकारी के लिए यहां देखें

निकालें …

माइक्रोसॉफ्ट विंडोज कंपाइलर्स के साथ संगतता के लिए, जीसीसी #pragma डायरेक्टिव्स के एक सेट का समर्थन करता है जो संरचनाओं के सदस्य (शून्य-चौड़ाई बिटफ़्लुड्स के अलावा), यूनियनों और बाद में परिभाषित वर्गों के अधिकतम संरेखण को बदलते हैं। हमेशा नीचे n मान दो की एक छोटी सी शक्ति होना आवश्यक है और बाइट्स में नए संरेखण को निर्दिष्ट करता है।

#pragma pack(n) बस नए संरेखण सेट करता है

#pragma pack() उस संरेखण को सेट करता है जो कि जब संकलन शुरू हुआ (कमांड लाइन विकल्प -fpack-struct[=<n>] देखें कोड जनरल विकल्प)।

#pragma pack(push[,n]) एक आंतरिक स्टैक पर वर्तमान संरेखण सेटिंग को धक्का देता है और फिर वैकल्पिक रूप से नया संरेखण सेट करता है।

#pragma pack(pop) संरेखण सेटिंग को आंतरिक स्टैक के शीर्ष पर सहेजा गया एक को पुनर्स्थापित करता है (और वह स्टैक प्रविष्टि निकाल देता है)

ध्यान दें कि #pragma pack([n]) इस आंतरिक स्टैक को प्रभावित नहीं करता है; इस प्रकार, #pragma pack(push) बाद कई #pragma pack(n) उदाहरणों के बाद और एकल #pragma pack(pop) द्वारा अंतिम रूप दिया जा सकता है।

कुछ लक्ष्य, जैसे i386 और powerpc, ms_struct #pragma समर्थन करता है जो दस्तावेज __attribute__((ms_struct)) रूप में एक संरचना देता है।

#pragma ms_struct on घोषित संरचनाओं के लिए लेआउट चालू करता है।

#pragma ms_struct off घोषित संरचनाओं के लिए लेआउट #pragma ms_struct off करता है।

#pragma ms_struct reset डिफ़ॉल्ट लेआउट पर वापस चला जाता है

आपको संरचना में जाने के लिए कुछ की आवश्यकता क्यों है?

मुझे लगता है कि #pragma pack(1) समान है, या क्या मुझे कुछ याद आ रहा है?

तुम यह केर सकते हो:

 struct Foo { #pragma pack(push, 1) int Bar; #pragma pack(pop) }; 

लेकिन यह बदसूरत लग रहा है।