سؤال

ما مدى أمان القيام بشيء مثل:

if (flag_val != NULL && strcmp (val, flag_val) == 0) {
   // something
} else {
   // something else
}

مع العلم ذلك في بعض الأحيان flag_val سوف يكون NULL وأحيانًا لا.

أعلم أنه سيتحقق أولاً إذا flag_val != NULL, ، إذا قام بتقييم خطأ ، فلا ينبغي التحقق من الشرط الثاني بشكل صحيح؟

شكرًا

هل كانت مفيدة؟

المحلول

صحيح ، إذا كان flag_val فارغًا ، فسيقوم عامل التشغيل && بدوارة قصيرة. طالما لا يمكن تغيير Flag_val بواسطة مؤشر ترابط آخر ، فهذا رمز آمن.

نصائح أخرى

إذا flag_val != NULL يقيم على خطأ ، وهذا هو ، flag_val هو NULL, ، ثم سيوقف منطق الدائرة القصيرة تقييم بقية التعبير (لأن الشرط بأكمله لا يمكن أن يكون صحيحًا). ما تفعله بخير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top