ఇతర

Mac హెచ్చరిక : సత్య విలువగా ఉపయోగించే అసైన్‌మెంట్ చుట్టూ కుండలీకరణాలను సూచించండి

ఆర్

రూబిసాహా

ఒరిజినల్ పోస్టర్
డిసెంబర్ 22, 2008
  • జనవరి 8, 2009
హాయ్
నేను ఈ కోడ్ స్నిప్పెట్‌ని ఉపయోగిస్తున్నాను

శూన్యం * హ్యాండిల్_;

ఒకవేళ (హ్యాండిల్_ =dlopen('/సిస్టమ్/లైబ్రరీ/ఫ్రేమ్‌వర్క్స్/డిస్క్ ఆర్బిట్రేషన్. ఫ్రేమ్‌వర్క్/వెర్షన్స్/ఎ/డిస్క్ ఆర్బిట్రేషన్', RTLD_NOW))
{
printf('............');

}
లేకపోతే (handle_ =dlopen('/System/Library/PrivateFrameworks/DiskArbitration.Framework/Versions/A/DiskArbitration',RTLD_NOW))
{
printf('.................');
}

కానీ నేను హెచ్చరికను పొందుతున్నాను:
మొదటి పంక్తి కోసం 'అసైన్‌మెంట్ చుట్టూ ఉన్న కుండలీకరణాలను సత్య విలువగా సూచించండి' i, 'ఫర్' లూప్ కోసం....ఈ హెచ్చరికను వదిలించుకోవడానికి ఎవరైనా నాకు సహాయం చేయగలరా.. TO

kpua

జూలై 25, 2006


  • జనవరి 8, 2009
ముందుగా, if() స్టేట్‌మెంట్‌లలో దుష్ప్రభావాలు కలిగి ఉండటం సాధారణంగా చెడు రూపం.

అయితే, కొన్నిసార్లు ఇది మీ ఉద్దేశాన్ని కోడ్ చేయడానికి సులభమైన మార్గం (అయితే ఇది మీ ఉదాహరణలో తప్పనిసరిగా ఉందని నేను అనుకోను). మీరు if స్టేట్‌మెంట్‌లో అసైన్‌మెంట్‌ను కలిగి ఉన్నప్పుడు, GCC సాధారణంగా ఇలాంటిదేని ఆశిస్తుంది:

కోడ్: |_+_|
అసైన్‌మెంట్ చుట్టూ ఉన్న అదనపు కుండలీకరణాలను గమనించండి. కింది లోపాన్ని నివారించడానికి మీరు కుండలీకరణాలను ఉపయోగించాలని GCC సూచిస్తుంది:

కోడ్: |_+_|
ఇది fooకి కేటాయించిన విలువ NULLకి సమానం అని తనిఖీ చేయదు, కానీ fooకి boolean (bar() != NULL)ని కేటాయించండి.

అక్కడ స్పష్టమైన బూలియన్ చెక్ ఇన్ చేయడం ఆచారం మరియు సాధారణంగా మరింత స్పష్టంగా ఉంటుంది, అందుకే GCC దీన్ని ఆశించింది. ఎస్

సాండర్

కు
ఏప్రిల్ 24, 2008
  • జనవరి 9, 2009
ప్రకటన కూడా దీనికి కారణం

కోడ్: |_+_|
సరైన C (bని aకి కేటాయించి మరియు సున్నా కానిది కోసం తనిఖీ చేయండి), కానీ చాలా తరచుగా వ్యక్తులు నిజంగా అర్థం చేసుకుంటారు

కోడ్: |_+_|
if() లోపల అసైన్‌మెంట్ మినహాయింపు కాబట్టి, GCC దాని గురించి హెచ్చరికను జారీ చేస్తుంది. అలాగే మీ కోడ్ యొక్క భవిష్యత్తు రీడర్‌ల కోసం, అదనపు కుండలీకరణాలు 'అవును, నేను నిజంగా ఇక్కడ అసైన్‌మెంట్‌ని సూచిస్తున్నాను' అని సూచిస్తాయి.