18
Oca

Aşağıdaki kodu derleyip çalıştırdığınızda çıktı ne olur?

#include <stdio.h>

#define f(x) x*3

int main() {
    int y = f(1 + 2);

    printf("y = %d\n", y);

    return 0;
}

y = 9 diyenler yanılıyor. f bir makro olduğu için kod derlenmeden önce aşağıdaki hale getiriliyor pre-processor tarafından:

...

int main() {
    int y = 1 + 2 * 3;

    printf("y = %d\n", y);

    return 0;
}

Çarpma işlemi, toplamaya göre öncelikli olduğundan (2 * 3) + 1 işlemi 7 sonucunu veriyor:

$ gcc -o test test.c
$ ./test
y = 7

Makroları bilerek kullanmak gerekiyor, ezberlemeden.