לדלג לתוכן

שפת C/הקדם מעבד/תרגילים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי


פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.



תחליפים ליכולות נוספות של הקדם מעבד

[עריכה]

הסכנה בפקודות מאקרו

[עריכה]

מה הבעיה בתוכנית הבאה?

#include <stdio.h>

#define min(a, b) a < b? a : b

int main()
{
  int a = 2, b = 3;

  printf("%d", min(++a, ++b));

  return 0;
}


פתרון

השורה:

 printf("%d", min(++a, ++b));

תתורגם לשורה הבאה:

 printf("%d", ++a < ++b? ++a : ++b);

ובכך יקודמו המשתנים פעמיים, ותודפס הספרה 4, ולא 3 שניתן היה לצפות לו, שהיה מתקבל לו היה המאקרו min מוחלף בקריאה לפונקציה.