30/09/2018, 17:04

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

Gió viết 19:15 ngày 30/09/2018

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;})

Nguyễn Minh Dũng viết 19:20 ngày 30/09/2018

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

Đạt Đỗ viết 19:20 ngày 30/09/2018

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

Gió viết 19:15 ngày 30/09/2018

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
Bài liên quan
0