/ / वैसे भी क्या मैं पूर्व प्रोसेसर निर्देशों के बिना सशर्त आधार पर सदस्यों को इनिशियलाइज़ कर सकता हूं? - सी, संरचना

क्या वैसे भी है कि मैं पूर्व प्रोसेसर निर्देशों के बिना सशर्त आधार पर सदस्यों को शुरू कर सकता हूं? - सी, संरचना

मेरे पास संरचनाओं की एक सरणी है। आरंभीकरण के दौरान, मुझे सशर्त आधार पर आरंभ करने की आवश्यकता है। कहना

struct struct_name[arraySize] = { {1, "a"}, {2, "b"},
#if condition
{3, "c"}
#else
{4, "d"}
#endif
};

उपरोक्त कोड में, मैंने प्री प्रोसेसर निर्देशों का उपयोग करके आरंभीकरण को नियंत्रित किया। वैसे भी मैं पूर्व प्रोसेसर निर्देशों का उपयोग किए बिना इस सशर्त संकलन को कर सकता हूं?

उत्तर:

उत्तर № 1 के लिए 4

हाँ, टर्नरी ऑपरेटर के साथ, इस तरह।

#include <stdio.h>

struct struc {
int number;
char letter;
};

int main()
{
int condition = 1;
struct struc array[] = {{1, "a"}, {2, "b"}, {condition ? 3:4, condition ? "c":"d"}};
return 0;
}

जवाब के लिए 3 № 2

यदि आप C99 के अंतर्गत हैं, तो आप यौगिक शाब्दिक का उपयोग कर सकते हैं:

struct x a[] = {{1,"a"},{2,"b"},condition?(struct x){3,"c"}:(struct x){4,"d"}};

एक और (अस्पष्ट) तरीका:

struct x a[] = {{1,"a"},{2,"b"},(struct x[]){{3,"c"},{4,"d"}}[!!condition]};

जवाब के लिए 2 № 3

क्योंकि मैं इस समय उपयोग करने के लिए एक सी संकलक नहीं हूँ, मैं यह जाँच कर सकता हूँ कि क्या यह C में काम करता है, लेकिन यह C ++ में काम करता है। यह टर्नरी का उपयोग करता है ? ऑपरेटर:

int a = 1;

char arr[3] = { "b", (a == 1 ? "c" : "d"), 0 };

int main()
{
printf(arr);
printf("n");
}