सी

2012-08-22 13 views
33

में टाइपोफ़ ऑपरेटर सी टाइप है, वास्तव में एक ऑपरेटर?
मैं सोच रहा हूं क्योंकि सी में कोई बहुलकता नहीं है, कि रन-टाइम पर कुछ भी नहीं है। यही है, टाइपफ का जवाब संकलन-समय पर जाना जाता है। (मैं टाइपफ के उपयोग के बारे में नहीं सोच सकता जो संकलन समय पर ज्ञात नहीं होगा।) तो यह एक ऑपरेटर की तुलना में एक संकलन-समय निर्देश का अधिक प्रतीत होता है।सी

क्या टाइपफॉफ़ किसी भी (प्रोसेसर) रन-टाइम (जीसीसी में) का उपयोग करता है?

+17

सी में कोई 'टाइपफ़ोफ़' ऑपरेटर नहीं है, जो एक कंपाइलर एक्सटेंशन है। –

उत्तर

37

typeof के बाद से एक संकलक विस्तार, वहाँ वास्तव में इसके लिए एक परिभाषा नहीं है, लेकिन सी की परंपरा में यह एक ऑपरेटर, उदा sizeof और _Alignof भी एक ऑपरेटर के रूप में देखा जाता है होगा।

और आप गलत हैं, सी में गतिशील प्रकार हैं जो केवल रन टाइम पर निर्धारित होते हैं: परिवर्तनीय संशोधित (वीएम) प्रकार।

size_t n = strtoull(argv[1], 0, 0); 
double A[n][n]; 
typeof(A) B; 

केवल रन समय पर निर्धारित किया जा सकता है।

+11

इस विषय के बारे में [दिलचस्प स्रोत] से लिंक करने से डरो मत (http://gustedt.wordpress.com/2011/01/09/dont-be-afraid-of-variably-modified-types/) इस विषय के बारे में :) –

+1

@ निकोलई रुहे, वीएम प्रकारों के लिए एक प्रमुख संसाधन के रूप में नहीं सोचा होगा ... लेकिन यदि आप ऐसा कहते हैं :) –

+0

बस [Google से पूछें] (http://www.google.com/search?q=VM + वीएलए + सी) –

3

देखना यह नहीं है वास्तव में एक ऑपरेटर, बल्कि एक कीवर्ड। और नहीं, यह कोई रनटाइम-जादू नहीं करता है।

+0

डाउनवॉट्स के कारण? –

23

यह एक जीएनयू एक्सटेंशन है। संक्षेप में यह किसी ऑब्जेक्ट को दूसरे प्रकार के समान घोषित करने का एक सुविधाजनक तरीका है। उदाहरण के लिए:

int x;   /* Plain old int variable. */ 
typeof(x) y; /* Same type as x. Plain old int variable. */ 

यह संकलन समय पर पूरी तरह से काम करता है और यह मुख्य रूप से मैक्रो में प्रयोग किया जाता है। typeof पर निर्भर मैक्रो का एक प्रसिद्ध उदाहरण container_of है।

+4

ऐसा मत सोचो कि यह पूरी तरह से संकलन में काम करता है, हालांकि मुझे यह मानना ​​है कि मैंने जांच नहीं की है: मुझे लगता है कि यह वीएलए और अन्य वीएम प्रकारों के लिए भी काम करता है। तो यह केवल रन टाइम पर ही निर्धारित किया जा सकता है। –

+0

@ जेन्सगस्टेड आप सही हैं। – cnicutar