Cẩn thận khi truyền ++x vào một function-like macro

Bài viết được post tại: http://portal.daynhauhoc.com/p/can-than-khi-truyen-x-vao-mot-function-like-macro/

1.Có thể các bạn đã biết macro sau tiềm ẩn lỗi. // macro SQUARE bình phương x nhập vào #define SQUARE(x) xx Khi ta chỉ truyền một số vào macro SQUARE, ví dụ SQUARE(3) sẽ tương đương 33 = 9 Tuy nhiên, nếu ta truyền 2+3 vào macro SQUARE thì…… xem thêm bài viết

6 Likes

Vẫn có thể dùng dc. Đó là dùng biến phụ, còn tham số chỉ dùng 1 lần để gán cho biến phụ.


#define square(x) ({ typeof(x) __x=(x); __x*__x;})

5 Likes

Cách này rất hay đó @Gio!

:+1:

2 Likes

mình chưa hiểu lắm: typeof(x) __x=(x) là sao vậy?

typeof(x) sẽ trả về kiểu dữ liệu của x. Ví dụ như lúc trước bạn khai báo int x, thì câu lệnh sau tương đương:

int __x=(x);
auto __x=(x); // c++11
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?