निम्नलिखित कोड समस्याओं के बिना संकलित करता है:
int main() {
printf("Hi" "Bye");
}
हालाँकि, यह संकलन नहीं है:
int main() {
int test = 0;
printf("Hi" (test ? "Bye" : "Goodbye"));
}
उसका क्या कारण है?
"Hi"
और "Bye"
कर रहे हैं स्ट्रिंग शाब्दिक , नहीं तार के रूप में सी मानक पुस्तकालय में इस्तेमाल किया। स्ट्रिंग शाब्दिकों के साथ , संकलक संघनन करेगा "H\0i" "B\0ye"
। उसी के साथ नहींsprintf(buf,"%s%s", "H\0i" "B\0ye");
a (some_condition ? + : - ) b
printf("Hi" ("Bye"));
काम नहीं करेगा - इसके लिए टर्नरी ऑपरेटर की आवश्यकता नहीं है; कोष्ठक पर्याप्त है (हालांकि printf("Hi" test ? "Bye" : "Goodbye")
यह भी संकलन नहीं होगा)। केवल सीमित संख्या में टोकन हैं जो एक स्ट्रिंग शाब्दिक का पालन कर सकते हैं। कोमा ,
, खुला वर्ग ब्रैकेट [
, क्लोज़ स्क्वायर ब्रैकेट ]
(जैसा कि 1["abc"]
- और हाँ, यह भीषण है), क्लोज़ राउंड ब्रैकेट )
, क्लोज़ कर्ली ब्रैकेट }
(एक इनिशियलर या इसी तरह के संदर्भ में), और अर्धविराम ;
वैध (और एक अन्य स्ट्रिंग शाब्दिक) हैं; मुझे यकीन नहीं है कि कोई अन्य भी है।