मैं पूछना चाहता हूं कि यह अनुवाद इकाइयों में स्ट्रिंग शाब्दिक पते पर भरोसा करने के लिए पोर्टेबल है या नहीं? अर्थात्:अनुवाद इकाइयों में स्ट्रिंग लिटल एड्रेस
एक दिया गया फ़ाइल foo.c
एक स्ट्रिंग शाब्दिक "I'm a literal!"
के लिए एक संदर्भ है, यह सही और पोर्टेबल भरोसा करने के लिए है कि अन्य दी फ़ाइल में, bar.c
उदाहरण में, कि एक ही स्ट्रिंग शाब्दिक"I'm a literal!"
उसी स्मृति होगा पता? यह ध्यान में रखते हुए कि प्रत्येक फ़ाइल का अनुवाद .o
फ़ाइल में किया जाएगा।
# File foo.c
/* ... */
const char * x = "I'm a literal!"
# File bar.c
/* ... */
const char * y = "I'm a literal!"
# File test.c
/* ... */
extern const char * x;
extern const char * y;
assert (x == y); //Is this assertion going to fail?
और एक जीसीसी उदाहरण कमांड लाइन:
gcc -c -o foo.o -Wall foo.c
gcc -c -o bar.o -Wall bar.c
gcc -c -o test.o -Wall test.c
gcc -o test foo.o bar.o test.o
के बारे में क्या एक ही अनुवाद इकाई में
बेहतर उदाहरण के लिए, एक उदाहरण के कोड इस प्रकार? क्या यह भरोसेमंद होगा यदि स्ट्रिंग्स अक्षर में अनुवाद इकाई में हैं?
नहीं, आप इस पर भरोसा नहीं कर सकते हैं। –
@NeilKirk धन्यवाद नील, मैंने संपादित किया है और एक माध्यमिक प्रश्न जोड़ा है। इसके पीछे कोई भी तर्क महान रोशनी का होगा। –
@fanl - संकलक के दृश्य सी ++ सूट में "स्ट्रिंग पूलिंग" का एक विकल्प है जहां एक ही शाब्दिक के पास एक ही सूचक मूल्य होगा। उस अंतिम वाक्य में मुख्य शब्द * विकल्प * है। इसका तात्पर्य है कि आप इस बात पर भरोसा नहीं कर सकते कि सूचक मान बराबर हैं। – PaulMcKenzie