rdfs:comment
| - מה הבעיה בתוכנית הבאה? 1.
* include 1.
* define min(a, b) a < b? a : b int main() {int a = 2, b = 3; printf("%d", min(++a, ++b)); return 0; } פתרון הבעיה היא, שפקודת המאקרו #define לא מטפלת בערכי המשתנים, אלא רק שמה את מה שהיא קיבלה איפה שצריך, כלומר, אחרי השימוש ב-#define, הפקודה printf("%d", min(++a, ++b)); תיהפך ל: printf("%d", ++a < ++b? ++a : ++b); ואם אנחנו נעבד את זה, זה כאילו כתוב: a++;/*a=a+1=2+1=3*/ b++;/*b=b+1=3+1=4*/ if(a a++;/*a=a+1=3+1=4*/ printf("%d", a);/*prints 4*/ } else {b++;/*b=b+1=4+1=5*/ printf("%d", b);/*prints 5*/ printf("%d", a);/*prints 3*/ } else {
|
abstract
| - מה הבעיה בתוכנית הבאה? 1.
* include 1.
* define min(a, b) a < b? a : b int main() {int a = 2, b = 3; printf("%d", min(++a, ++b)); return 0; } פתרון הבעיה היא, שפקודת המאקרו #define לא מטפלת בערכי המשתנים, אלא רק שמה את מה שהיא קיבלה איפה שצריך, כלומר, אחרי השימוש ב-#define, הפקודה printf("%d", min(++a, ++b)); תיהפך ל: printf("%d", ++a < ++b? ++a : ++b); ואם אנחנו נעבד את זה, זה כאילו כתוב: a++;/*a=a+1=2+1=3*/ b++;/*b=b+1=3+1=4*/ if(a a++;/*a=a+1=3+1=4*/ printf("%d", a);/*prints 4*/ } else {b++;/*b=b+1=4+1=5*/ printf("%d", b);/*prints 5*/ } וידפיס 4 או 5, ומה שרצינו היה בכלל printf("%d", ++a < ++b? a : b); שהיה מניב את התוצאה הבאה: a++;/*a=a+1=2+1=3*/ b++;/*b=b+1=3+1=4*/ if(a printf("%d", a);/*prints 3*/ } else {printf("%d", b);/*prints 4*/ } שידפיס 3 או 4.
|