होने मैं निम्नलिखित कोड है:समस्याएं जब typedef और सरणी
typedef float vec3_t[3];
void f(const vec3_t v[2]){
// do stuff
}
int main(int argc, char * argv[]){
vec3_t v[2];
v[2][1] = 1;
f(v);
return 0;
}
जो
gcc main.c -std=gnu99 -O0 -o main
का उपयोग कर संकलन नहीं होगा लेकिन त्रुटि दिखा सकते हैं
main.c: In function ‘main’:'
main.c:293:5: warning: passing argument 1 of ‘f’ from incompatible pointer type [enabled by default]
f(v);
^
main.c:286:6: note: expected ‘const float (*)[3]’ but argument is of type ‘float (*)[3]’
void f(const vec3_t v[2]){
^
हैं मैं दूसरी तरफ समारोह में कॉन्स आवश्यकता को हटा देता हूं। यह सब ठीक काम करता है। मैं समझ नहीं सकता कि क्या गलत है ??
भी देखें: http://stackoverflow.com/questions/28062095/pass-a-two-dimensional-array-to-a-function-of-constant-parameter –
मेरी शिकार कड़ी में उल्लेख किया है, यह शायद सी प्रकार प्रणाली में एक दोष है। मुझे लगता है कि यह हाइलाइट करता है कि 'टाइपिफ़' के पीछे छिपाने वाले पॉइंटर्स या सरणी क्यों एक अच्छा विचार नहीं है। – user694733
यह एक सटीक डुप्लिकेट नहीं है, क्योंकि लिंक किया गया प्रश्न सरणी पॉइंटर्स के संबंध में था। इस मामले में 2 डी सरणी हैं। जवाब हालांकि वही होगा। – Lundin