मैंने फ़ाइल से पढ़े गए कुछ डेटा को स्टोर करने के लिए एक स्ट्रक्चर का उपयोग किया। संरचना सदस्य एक फ्लोट और अहस्ताक्षरित पूर्णांकों की एक सरणी हैं। फ़ाइल पढ़ने के बाद कोई भी मान कभी नहीं बदलेगा। जिस मूल्य को मैं स्थानीय रूप से संग्रहीत करना चाहता हूं वह संरचना सदस्य सरणी में निहित अहस्ताक्षरित पूर्णांकों में से एक है।

क्या मूल्य के लिए संरचना सूचक को संदर्भित करना और बाद में उपयोग किए जाने वाले स्थानीय चर में संग्रहीत करना बुरा व्यवहार है या क्या मुझे हर बार foo->vals[MY_NUMBER] लिखना चाहिए जब मैं उस मान का उपयोग किसी चीज़ के लिए करना चाहता हूं।

मेरे प्रश्न को देखने के लिए समय निकालने के लिए धन्यवाद।

वर्तमान में मेरा कोड ठीक वैसे ही सेट किया गया है जैसा मैंने नीचे लिखा है जैसे चीजों का उपयोग किए बिना:

 while (timer < config->values[MY_NUMBER]){ /* code*/}

My_struct.c :

typedef struct Config {
  float MY_FLOAT;
  unsigned int values[TOTAL_PARAMS];
} Config;

मुख्य सी:

int main(int argc, char **argv) {

  Config *config = load_config();

  int timer = 0;
  int finish_time = config->values[FIN_TIME];

  int rand_min_max[2] = {config->values[MIN],config->values[MAX]};

   /*... code*/

  while (timer < finish_time) {
    randomizer_func(rand_min_max);
    /* Code*/
  }
}
2
Shwig 17 फरवरी 2019, 03:30

2 जवाब

सबसे बढ़िया उत्तर

अनुकूलक को इसे साफ करना चाहिए, इसलिए मुझे संदेह है कि एक पूर्ण प्रभाव होगा। सवाल यह है: क्या यह आपके कोड को अधिक पठनीय और/या बनाए रखने में आसान बनाता है? इस तरह से अस्थायी चर का उपयोग करना बहुत आम है। जब तक आपको कोई कारण न मिल जाए कि यह "बुरा" है, तब तक इसे अपनाएं।

विचार करने की एक और बात यह है कि, स्थानीय चर की प्रतिलिपि बनाकर और हर बार सूचक को संदर्भित करने से बचने से, आप संभावित रूप से प्रश्न में मूल्य तक पहुंच को तेज कर रहे हैं। हालांकि: पहली पहुंच के बाद उस मान को कैश किया जा सकता है, और, फिर से जादुई, अद्भुत अनुकूलक शायद इसे ठीक कर देगा। (लेकिन, एक इंजीनियर के रूप में, आपको कभी भी उस पर भरोसा नहीं करना चाहिए - मान लेने के बजाय परीक्षण और मान्य करें।)

मेरी राय में (क्रिंग), तुम ठीक हो। उसके साथ जाओ।

4
3Dave 17 फरवरी 2019, 03:35

नहीं, यह आगे के संदर्भ के बिना एक बुरा अभ्यास नहीं लगता।

चूंकि कॉन्फ़िगरेशन मान नहीं बदलेगा और आप केवल उन अलग-अलग कॉन्फ़िगरेशन पैरामीटर की प्रतिलिपि बना रहे हैं जिनकी आपको आवश्यकता है, आप किसी भी डाउनसाइड्स को पेश किए बिना कोड को थोड़ा और अधिक पठनीय बना रहे हैं।

3
Tugrul Ates 17 फरवरी 2019, 03:37