2016-03-12 10 views
7

क्यों इस काम:प्रारंभ typedef struct

struct person { 
    char name[50]; 
    short mental_age; 
} p1 = {"Donald", 4}; 

लेकिन यह नहीं:

typedef struct { 
    char name[50]; 
    short mental_age; 
} PERSON p1 = {"Donald", 4}; 

वहाँ एक रास्ता है कि मैं एक typedef struct बनाने के लिए और डोनाल्ड को प्रारंभ कर सकते हैं जब मैं इस struct को परिभाषित है?

उत्तर

5

typedef एस अन्य प्रकार के लिए उपनाम हैं। आप क्या कर रहे हैं सुविधा typedef बना रही है। चूंकि typedef का उद्देश्य उपनाम बनाने के लिए है, तो आप इसे परिवर्तनीय परिभाषित नहीं कर सकते हैं। ,

typedef struct { 
    // data 
} mytype; 

mytype mydata = {"Donald", 4}; 
+0

पेडेंटिक, लेकिन आप यहां क्या कर रहे हैं एक चर परिभाषित कर रहा है, इसे घोषित नहीं कर रहा है। – Ben

+0

@ बेन, हाँ, आप सही हैं। मैं एक मूल अंग्रेजी स्पीकर नहीं हूं और ईमानदार होने के लिए, मैं इन दोनों शब्दों के बीच अंतर को शायद ही देख सकता हूं, इसलिए मैं कभी-कभी उन्हें मिश्रण कर रहा हूं। – ForceBru

+0

@ बेन: आप गलत हैं। सी भाषा में * परिभाषा * और * घोषणा * की अवधारणा पारस्परिक रूप से अनन्य नहीं हैं। * परिभाषा * सिर्फ एक विशेष प्रकार की * घोषणा * है। तो, उसके मामले में वह * एक परिवर्तनीय 'mydata' घोषित कर रहा है। वह * वैरिएबल 'mydata' की घोषणा * एक ही समय में * परिभाषा * होती है। – AnT

2

सबसे अच्छा तरीका है कि मैं के बारे में पता, struct घोषणा से typedef बयान के लिए इसी तरह से कठोर परिभाषा अलग करने के लिए है:

आप ऐसा करने के लिए है

struct sPerson 
{ 
    char name[50]; 
    short mental_age; 
}; 

typedef struct sPerson PERSON; 

PERSON p1 = {"Donald", 4}; 
संबंधित मुद्दे