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.















