Tôi đang gặp phải vấn đề với việc hiểu cách sử dụng các cuộc gọi hàm macro từ bên trong một câu lệnh printf().Gọi hàm macro từ bên trong lệnh printf trong C
Tôi có đoạn code dưới đây:
#include<stdio.h>
#define f(g,h) g##h
main()
{
printf("%d",f(100,10));
}
Mã này kết quả đầu ra "10010" là câu trả lời.
Tôi đã học được rằng chức năng macro gọi đơn giản là sao chép bột nhão mã chức năng macro thay cho cuộc gọi với các đối số được thay thế.
Vì vậy, các mã nên được như:
#include<stdio.h>
#define f(g,h) g##h
main()
{
printf("%d",100##10);
}
Nhưng khi tôi thực hiện các mã trên riêng với vĩ mô thay, tôi nhận được một lỗi biên dịch.
Vậy mã đầu tiên cung cấp 10010 làm câu trả lời trong khi mã thứ hai đưa ra lỗi biên dịch như thế nào?
## chỉ hợp lệ INSIDE câu lệnh #define của bạn và có 'không có hiệu lực' trừ khi dòng bắt đầu là '#define [your stuff here]', vì '#define' là những gì hướng dẫn trình biên dịch xử lý phần đó mã đặc biệt. – ActiveTrayPrntrTagDataStrDrvr
'##' đảm bảo các tham số được nối. Do đó: f (100,10) được thay thế bằng bộ tiền xử lý trong: 10010 – Tomas