วงแหวนเว็บ

neizod's speculation

insufficient data for meaningful answer

C Define

Thursday, February 28, 2013, 09:12 PM

ข้อควรระวังกับการใช้ #define ใน C คือว่ามันจะทำงานเหมือนการ replace string ไปตรงๆ อย่างนี้

#define ADD(x,y) x+y
...
printf("%f\n", ADD(5.0, 8.0/2.0) * 2.0);
printf("%f\n", 2.0 * ADD(5.0, 8.0/2.0));
...

บรรทัดแรกจะแปลงเป็น

\[5+\frac82\times2 = 5+\left(\frac82\times2\right) = 5 + 8 = 13\]

ส่วนบรรทัดที่สองจะแปลงเป็น

\[2\times5+\frac82 = (2\times5)+\frac82 = 10 + 4 = 14\]

ถ้าจะให้มันทำงานถูกต้อง ให้เปลี่ยนวิธีเขียนใหม่เป็น

#define ADD(x,y) ((x)+(y))

…วงเล็บเยอะน่าดู กลับไปเขียนแบบ function เหอะ 555+

Originally published on: Google+

neizod

author