1) Số
2) Một Macro trong C chỉ đơn giản là văn bản được mở rộng trước trình biên dịch xử lý mã nguồn. Từ khóa nội tuyến được sử dụng như một gợi ý cho trình biên dịch rằng hàm có thể được đặt nội tuyến mà không cần một ngăn xếp cuộc gọi được thiết lập.
Vì vậy, ví dụ, cho phép nói rằng bạn có hai đoạn mã sau (First vĩ mô và sau đó là chức năng inline):
#define MAX(x,y) (x > y ? x : y)
và
inline int max(int x, int y) { return x > y ? x : y; }
Khi preprocessor tìm thấy cuộc gọi sau trong mã của bạn:
int highest = MAX (var_1, var_2);
nó sẽ thay thế bằng
int highest = (var_1 > var_2 ? var_1 : var_2);
Trên đây là những gì các trình biên dịch cuối cùng được trong quá trình biên soạn, vì thế đoạn xác định bởi MAX (x, y) là thay cho MAX (VAR_1, VAR_2). Khi trình biên dịch tìm thấy hàm gọi
int highest = max (var_1, var_2);
Sau đó, hàm "max" được gọi. Bạn phải giả định rằng nó được gọi là cách bình thường, bởi vì trình biên dịch được tự do bỏ qua gợi ý "nội tuyến" của bạn và thực hiện cuộc gọi đến hàm thông qua lệnh gọi bình thường thay vì chỉ đặt mã cho hàm ở vị trí của nó đã gặp.
Một caveat cuối cùng với các macro: vì nó là tất cả thay thế văn bản và không mã thay thế, nếu bạn làm điều gì đó như thế này:
int highest = MAX (v1++, v2++);
Preprocessor sẽ mở rộng đến:
int highest = (v1++ > v2++ ? v1++ : v2++);
mà có lẽ không phải là những gì bạn dự định.
http://msdn.microsoft.com/en-us/library/bf6bf4cf.aspx – CCoder