שפת 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 מוחלף בקריאה לפונקציה.