2010-08-20 6 views
13

मैंने सी में डेटा संरचनाओं और कार्यों का संग्रह लिखा है, जिनमें से कुछ _Bool डेटा प्रकार का उपयोग करते हैं। जब मैंने शुरू किया, तो परियोजना शुद्ध सी होने जा रही थी। अब मैं सी ++ आधारित जीयूआई टूल किट का उपयोग कर जांच कर रहा हूं और बैकएंड कोड को लाइब्रेरी में बना दिया है।_Bool और bool: मैं c पुस्तकालय की समस्या को कैसे हल करूं जो _Bool का उपयोग करता है?

हालांकि, जब सी ++ जीयूआई संकलन निम्न त्रुटि संकलक द्वारा उत्सर्जित होता है:

ISO C++ forbids declaration of '_Bool' with no type

मैं शुरू में सोचा था कि मैं & bool करने के लिए _Bool की जगह और बनाने के खोज सकते हैं:

/* mybool.h */ 
#ifndef MYBOOL_H 
#define MYBOOL_H 

typedef _Bool bool; 

#endif /* MYBOOL_H */ 

और फिर किसी भी शीर्षलेख में जो _Bool

का उपयोग करता है

जब तक मुझे एहसास हुआ कि यह लाइब्रेरी को एक बूलियन (सी _Bool) डेटा प्रकार के साथ संकलित करेगा, और लाइब्रेरी के खिलाफ किसी अन्य (सी ++ बूल) का उपयोग करके लिंक करेगा। व्यावहारिक रूप से, इससे कोई फर्क नहीं पड़ता, लेकिन सैद्धांतिक रूप से, यह संभवतः (कुछ अस्पष्ट प्रणाली हो सकती है जो इस तरह से कर रही है जिससे ब्रह्मांड अंदर आ जाए)।

मुझे लगता है कि मैं सिर्फ एक int का उपयोग कर सकता हूं और झूठ के लिए 0 का उपयोग कर सकता हूं और सत्य के लिए 1 का उपयोग कर सकता हूं, और इसे typedef int mybool जैसे कुछ टाइप कर सकता हूं, लेकिन यह अवांछित लगता है।

क्या ऐसा करने के लिए कोई बेहतर/बेवकूफ/मानक तरीका है?

+1

उस टिप्पणी को एक उत्तर दें, 'बूल' यह है कि' _Bool' का सामान्य रूप से उपयोग करने का इरादा है। –

+1

तो मुझे अंदर ब्रह्मांड के बारे में चिंता करने की ज़रूरत नहीं है? –

उत्तर

5

डंबस! बस #include <stdbool.h> और bool का उपयोग करें।

+5

गूंगा गधा: (विशेषण) बेहद बुद्धिमान। (हाइफेनेटेड। "गधा" देखें)। क्या आपका मतलब यह है कि इसके विपरीत आप बेहद बुद्धिमान हैं क्योंकि आप जानते हैं कि सी # में बूल का उपयोग करने के लिए #शामिल करना चाहिए। मैं यह नहीं कहता कि मैं आपके उत्तर के बारे में क्या सोचता हूं। –

+9

क्यों हाँ, मेरे गूंगा-गधे के विपरीत, निश्चित रूप से मैं अधिक बुद्धिमान हूं। –

+0

ने अपना खुद का जवाब स्वीकार किया और खुद को एक गूंगा-गधा कहने का निर्णय (** ** ** stackoverflow.com पर प्रश्न पूछने से पहले जवाब को महसूस नहीं करने के लिए)। –

-4

अपने सी और सी ++ कोड दोनों के लिए typedef int _Bool का उपयोग करें। मुझे आश्चर्य होगा अगर _Bool को किसी और चीज के रूप में परिभाषित किया गया है।

+8

_Bool सी 99 मूल प्रकार है। –

+0

इस प्रकार आप नहीं कर सकते। –

+1

@ जेम्स मॉरिस: न केवल यह मूल प्रकार है, इसका नाम एक कीवर्ड है (माना जाता है कि सी कंपाइलर सी 99 या बाद में समर्थन करता है)। –

11

C और C++ compilers आप उपयोग कर रहे हैं तो मैं के रूप में सी ++ bool एक ही प्रकार के होने के लिए सी _Bool उम्मीद होती है एक ही विक्रेता से हैं, और वह भी शामिल है <stdbool.h> सब कुछ अच्छी तरह से अंतर-संचालित होगा। अगर वे अलग-अलग विक्रेताओं से हैं तो आपको संगतता की जांच करनी होगी।

नोट, आप अपने हेडर में __cplusplus मैक्रो का परीक्षण कर सकते हैं यह निर्धारित करने के लिए कि कोड को C++ के रूप में संकलित किया जा रहा है या नहीं, और उचित प्रकार सेट करें।

+0

मैं हमेशा अपने हेडर में __cplusplus मैक्रो का परीक्षण कर सकता हूं ... Mmmm हाँ, अच्छी तरह से देखा। –

+0

http://stackoverflow.com/questions/25461/interfacing-with-stdbool-hc ऐसे मामले का एक उदाहरण है जहां वे संगत नहीं हैं, हालांकि समस्या एक खराब गैर-कंपाइलर-प्रदान की गई थी 'stdbool.h' हैडर। –

1

मुझे लगता है कि किसी भी प्रोजेक्ट में bool का उपयोग करना चाहिए, ताकि सी ++ के साथ संगतता हो सके, यदि आवश्यक हो।

सी 99 में डेटा प्रकार _Boolbool के संभावित अस्तित्व वाले संस्करणों के साथ संघर्ष से बचने के लिए मौजूद है जो प्रोग्रामर को मानक C99 से पहले परिभाषित किया जा सकता था। इस प्रकार, प्रोग्रामर अपने पुराने सी प्रोग्राम को नए मानक की ओर माइग्रेट करने के लिए अनुकूलित करने का बेहतर तरीका चुन सकता है। इस प्रकार, मुझे लगता है कि bool शब्द का उपयोग करने के लिए सी 99 स्टैंडराइजेशन कमेटी की वास्तव में इच्छा है, लेकिन बदसूरत शब्द _Bool को परिभाषित करके असंगतता के मुद्दों को घेरने के लिए मजबूर किया गया है। इससे पता चलता है कि प्रोग्रामर को शायद अपनी परियोजनाओं में "इच्छित" शब्द bool का उपयोग करना होगा। एक कार्यक्रम में बूलियन प्रकार घोषित करने के लिए यह सबसे तार्किक शब्द है।

कुछ मामलों में, यह bool की एक प्रोग्रामर preexistent परिभाषा रखने के लिए अच्छा विचार हो सकता है और अन्य मामलों में, यह bool संस्करण <stdbool.h> में परिभाषित उपयोग करने के लिए बेहतर होगा। प्रोग्रामर को यह तय करना होगा कि प्रत्येक मामले में क्या बेहतर है और इसके अलावा, शायद यह विचार करने के लिए कि <stdbool.h> पर क्रमिक प्रवासन करने के लिए एक अच्छी कार्रवाई है या नहीं।

यदि आप शून्य से कोई प्रोजेक्ट शुरू कर रहे हैं, तो शायद में परिभाषित bool का उपयोग करने का सबसे अच्छा तरीका है।

3

औपचारिक रूप से, इस समस्या के लिए कोई समाधान नहीं है। _Bool टाइप करें केवल सी सी ++ भाषा में मौजूद कोई भी प्रकार प्रदान नहीं करता है जो _Bool के साथ बाइनरी संगतता की गारंटी देगा। सी ++ bool संगत होने की गारंटी नहीं है।

उचित समाधान सी ++ कोड से सीधे पहुंच योग्य (यानी लिंक करने योग्य) होने के उद्देश्य से सी कार्यों के पैरामीटर घोषणाओं में bool या _Bool का उपयोग नहीं करना है। int, char या किसी अन्य प्रकार का उपयोग करें जो संगत होने की गारंटी है।

+2

मुझे संदेह है कि 'int' या' char' _guaranteed_ सी और सी ++ के बीच संगत होने के लिए है। यह संकलक के लिए प्रलेखन में सच साबित किया जा सकता है, लेकिन आम तौर पर यह दावा झूठा है। और अगर दस्तावेज संगत 'int' कहता है तो मुझे नहीं लगता कि इसे 'बूल' के बारे में क्यों नहीं कहना चाहिए। – magras

संबंधित मुद्दे