वहाँ चर एक समारोह के भीतर स्थिर के रूप में घोषित पुनर्स्थापित करने के लिए एक रास्ता है के भीतर स्थैतिक चर रीसेट करने के लिए? लक्ष्य यह सुनिश्चित करना है कि फ़ंक्शन को एक असंबंधित कॉल से लिंगरिंग मानों के साथ नहीं कहा जाता है। उदाहरण के लिए, मेरे पास एक मैट्रिक्स के कॉलम पर एक फ़ंक्शन ओपेरेटिंग है।कैसे एक समारोह
int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows
if (column != whichColumn){
memset(v,0,size);
whichColumn = which;
}
//do other things
}
फ़ंक्शन प्रत्येक कॉलम के लिए एक बार एन बार कहा जाता है। क्या यह स्थैतिक चर "पुनः सेटिंग" का एक उचित तरीका है? क्या स्थैतिक चर को रीसेट करने के अन्य सामान्य मूर्ख-प्रमाण तरीके हैं? उदाहरण के लिए, मैं यह सुनिश्चित करना चाहता हूं कि यदि कॉल संभवतः विभिन्न आयामों के साथ एक नए मैट्रिक्स के साथ बनाया गया है तो वेक्टर वी का आकार बदल दिया गया है और शून्य हो गया है। ऐसा लगता है कि फ़ंक्शन को एक नल पॉइंटर के साथ कॉल करने का सबसे आसान तरीका हो सकता है:
int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows
if (A == NULL){
FREE(v);
whichColumn = 0;
}
//do other things
}
स्थिर/वैश्विक चर का प्रयोग न करें के रूप में कोई भी नहीं है। इसके बजाय फ़ंक्शन को एक पूर्णांक में एक पॉइंटर पास करें जिसे कॉलर कॉल में राज्य को संरक्षित रखने के लिए बनाए रखता है। –
मुझे अभी भी एक ही समस्या है Ihre मुझे अपने स्थिर चर को रीसेट करना था, लेकिन केवल मेरे टेस्ट कोड में। मेरा हैक इनपुट पॉइंटर्स को पूर्ण करने के लिए सेट करना था, उस के लिए func में जांचें, फिर वैरिएबल को उचित रूप से रीसेट करें - प्रभावी रूप से ध्वज के रूप में मौजूदा पैरामीटर में एक नल मान का उपयोग करके। थोड़ा सुगंधित लेकिन यह काम करता है। – bph
स्थैतिक सदस्य चर के साथ एक वर्ग शायद आपका आदर्श समाधान होगा, लेकिन सी (नो ओओपी) के साथ शायद एक स्थैतिक संरचना शायद निकटतम सुरुचिपूर्ण समाधान है। – bph