Hãy xem xét những điều sau C chương trình (bỏ qua các vấn đề tác dụng phụ kép):mở rộng Macro cho các macro với đối số so với các biến có cùng tên
#define max(a, b) (a>b?a:b)
int main(void){
int max = max(5,6);
return max;
}
Các GCC tiền xử lý biến này vào:
int main(void){
int max = (5>6?5:6);
return max;
}
Điều này khá hay vì bạn không phải lo lắng về những va chạm không chủ ý giữa max
và max()
. Số GCC manual cho biết:
Macro giống như chức năng chỉ được mở rộng nếu tên của nó xuất hiện với một cặp dấu ngoặc sau nó. Nếu bạn chỉ viết tên, nó được để lại một mình
Đây có phải là tiêu chuẩn hóa hay chỉ là một cái gì đó được thực hiện theo quy ước?
Tôi đang bối rối. Có vẻ như gcc đã vinh danh macro tối đa và thay vào đó không gọi hàm tối đa thực. – octopusgrabbus
@octopusgrabbus: Chức năng 'max' là gì? –
Tìm thấy phần liên quan trong sách hướng dẫn GCC, nhưng tôi vẫn không biết nếu điều này được chuẩn hóa hay chỉ là một quy ước không chính thức – mensi