में साझा वैश्विक चर बदलते हैं मैं सी में साझा किए गए वैश्विक चर कैसे बना सकता हूं? अगर मैं इसे हेडर फ़ाइल में डालता हूं, तो लिंकर शिकायत करता है कि चर पहले ही परिभाषित हैं। क्या मेरी सी फाइलों में से एक में वैरिएबल घोषित करने का एकमात्र तरीका है और अन्य सभी सी फाइलों के शीर्ष पर extern
एस मैन्युअल रूप से डालने का एकमात्र तरीका है? यह आदर्श नहीं लगता है।सी
सी
उत्तर
हेडर फ़ाइल में इसे extern
के साथ लिखें। और सी फाइलों में से किसी एक के वैश्विक दायरे में इसे extern
के बिना घोषित करें।
क्या हम इसे * .c फ़ाइल की हेडर फ़ाइल में इसके बजाय घोषित कर सकते हैं? – Geremia
एक हेडर फाइल (shared.h) में:
#include "shared.h"
कई बचने के लिए:
extern int this_is_global;
है कि आप इस वैश्विक प्रतीक का उपयोग करना चाहते हर फ़ाइल में, हेडर extern घोषणा युक्त शामिल लिंकर परिभाषाएं, आपके वैश्विक प्रतीक की केवल एक घोषणा आपके संकलन इकाइयों में मौजूद होनी चाहिए (उदाहरण: साझा.cpp):
/* shared.cpp */
#include "shared.h"
int this_is_global;
आपने घोषणा को हेडर फ़ाइल में डाल दिया है, उदा।
extern int my_global;
आपकी .c फ़ाइलों में से एक में आप इसे वैश्विक दायरे में परिभाषित करते हैं।
int my_global;
चाहता है कि my_global
के लिए उपयोग में extern
साथ हेडर फाइल शामिल हर ग फ़ाइल।
हेडर फाइल
हेडर फाइल
#ifndef SHAREFILE_INCLUDED
#define SHAREFILE_INCLUDED
#ifdef MAIN_FILE
int global;
#else
extern int global;
#endif
#endif
साथ
फ़ाइल में वह फ़ाइल जिसे आप वैश्विक रखना चाहते हैं:
#define MAIN_FILE
#include "share.h"
अन्य फ़ाइलों निर्वासन संस्करण की आवश्यकता है कि में:
#include "share.h"
आह यह एक समाधान है जो मैंने थोड़ी देर पहले किया था - मैं MAIN_FILE प्रीप्रोसेसर चर के बारे में भूल गया था। मैं पतली हूं कि मैं स्वीकार किए गए उत्तर को और अधिक पसंद करता हूं – Claudiu
आप सी और सी के बीच कोड शेयर कर रहे हैं ++, shared.h
फ़ाइल में निम्न जोड़ने के लिए याद रखें:
#ifdef __cplusplus
extern "C" {
#endif
extern int my_global;
/* other extern declarations ... */
#ifdef __cplusplus
}
#endif
वहाँ केवल एक हेडर फ़ाइल के साथ एक क्लीनर तरीका है ताकि इसे बनाए रखना आसान हो। वैश्विक चर के साथ शीर्ष लेख में एक कीवर्ड (मैं आम का उपयोग करें) तो सिर्फ एक स्रोत फ़ाइल में साथ प्रत्येक घोषणा उपसर्ग इस
#define common
#include "globals.h"
#undef common
और इस
#define common extern
#include "globals.h"
#undef common
की तरह किसी अन्य स्रोत फ़ाइलों की तरह इसे शामिल बस सुनिश्चित करें कि आप globals.h फ़ाइल में किसी भी चर को प्रारंभ नहीं करते हैं या लिंकर अभी भी प्रारंभिक चर के रूप में शिकायत करेगा, बाहरी कीवर्ड के साथ भी बाहरी के रूप में नहीं माना जाता है। वैश्विक।एच फ़ाइल इस
#pragma once
common int globala;
common int globalb;
etc.
किसी भी प्रकार की घोषणा के लिए काम करने लगती है। निश्चित रूप से #define पर सामान्य कीवर्ड का उपयोग न करें।
- 1. सी/सी ++/जावा/सी #
- 2. सी #, सी/सी ++ या ऑब्जेक्टिव-सी
- 3. सी/सी ++
- 4. सी/सी ++
- 5. सी/सी ++
- 6. सी/सी ++
- 7. सी/सी ++
- 8. सी/सी ++
- 9. सी/सी ++
- 10. सी/सी ++
- 11. सी/सी ++
- 12. सी/सी ++
- 13. सी/सी ++
- 14. सी/सी ++
- 15. सी/सी ++
- 16. सी/सी ++
- 17. सी/सी ++
- 18. सी/सी ++
- 19. सी/सी ++
- 20. सी/सी ++
- 21. सी/सी ++
- 22. सी/सी ++
- 23. सी/सी ++
- 24. सी/सी ++
- 25. सी/सी ++
- 26. सी/सी ++
- 27. सी/सी ++
- 28. सी/सी ++
- 29. सी/सी ++
- 30. सी/सी ++
अपने स्वयं के स्रोत कोड के भीतर साझा किया गया? एक हेडर फ़ाइल में बाहरी घोषणा, और किसी अन्य (एकल) स्रोत में परिभाषा दें। वे निश्चित रूप से आपकी प्रक्रिया धागे के बीच साझा किए जाते हैं। डेटा के इंटरप्रोसेस शेयरिंग के लिए, आईपीसी तंत्र (साझा मेमोरी, पाइप) का उपयोग करें। –
यह भी देखें [सी में 'बाहरी' चर क्या हैं?] (Http://stackoverflow.com/questions/1433204/what-are-extern-variables-in-c/1433387#1433387) –
संभावित डुप्लिकेट [कैसे करें मैं विभिन्न .c फाइलों के बीच चर साझा करता हूं?] (Http://stackoverflow.com/questions/1045501/how-do-i-share-variables-between-different-c-files) – 7hi4g0