के रूप में घोषित किया गया है, आज मैं कुछ कोड में आया जो मुझे आश्चर्यचकित कर दिया। एक चर को स्थिर होने के रूप में .c फ़ाइल में (फ़ंक्शन के बाहर) परिभाषित किया गया था। हालांकि, .h फ़ाइल में इसे बाहरी होने के रूप में घोषित किया गया था।वैरिएबल के रूप में परिभाषित चर के रूप में कोई चेतावनी या त्रुटि संकेत नहीं है लेकिन बाहरी
संरचना परिभाषा और घोषणा ज में:
typedef struct
{
unsigned char counter;
unsigned char some_num;
} One_Struct;
typedef struct
{
unsigned char counter;
unsigned char some_num;
const unsigned char * p_something;
} Another_Struct;
typedef struct
{
One_Struct * const p_one_struct;
Another_Struct * const p_another_struct;
} One_Useful_Struct;
extern One_Useful_Struct * const p_my_useful_struct[];
परिभाषा और आरंभीकरण ग में:
static One_Useful_Struct * const p_my_useful_struct[MAX_USEFUL_STRUCTS] =
{
&p_my_useful_struct_regarding_x,
&p_my_useful_struct_regarding_y,
};
प्रश्न: यहाँ कोड की एक ऐसी ही उदाहरण है तो मेरा सवाल है, मुझे एक कंपाइलर त्रुटि या चेतावनी क्यों नहीं मिली?
कोड कुछ समय से अन्य परियोजनाओं में सफलतापूर्वक चल रहा है। मैंने ध्यान दिया कि पॉइंटर का उपयोग कभी भी .c फ़ाइल के बाहर नहीं किया जाता है जिसमें इसे परिभाषित किया जाता है और स्थिर रूप से परिभाषित किया गया था (मैंने बाहरी घोषणा को हटा दिया)। एकमात्र कारण जिसे मैंने पाया था क्योंकि मैं इस परियोजना पर लिंट चला गया था और लिंट ने इसे उठाया था।
यह एक अच्छा मुद्दा है, मुझे यह देखना होगा कि कौन से एक्सटेंशन मौजूद हैं। मैं एआरएम के लिए केइल यूविजन का उपयोग कर रहा हूं। –
जगह में कोई अजीब एक्सटेंशन नहीं हैं। यह सिर्फ इस कंपाइलर के साथ कुछ होना चाहिए। आपके इनपुट के लिए धन्यवाद, मैं इसकी सराहना करता हूं। –