Tôi muốn chèn một số câu lệnh đầu ra gỡ lỗi vào cơ sở mã C lớn. Các câu lệnh đầu ra gỡ lỗi này sẽ được điều khiển bởi các công tắc tùy chọn trình biên dịch.
Câu lệnh đầu ra gỡ lỗi trông như thế này:
#ifdef GỠ LỖI_FLAG
In(một sốSymbol)
#endif
Để tiết kiệm một số thao tác gõ, tôi tự hỏi liệu tôi có thể xác định một macro đơn giản mở rộng sang khối câu lệnh đầu ra gỡ lỗi ở trên không?
Ví dụ:
#define DBG_MACRO(someSymbol) (thứ gì đó có thể mở rộng lên trên)
Bạn không thể đặt các chỉ thị tiền xử lý bên trong macro tiền xử lý.
Tuy nhiên, không có gì ngăn cản bạn xác định macro mở rộng thành Không có:
#ifdef GỠ LỖI_FLAG
# xác định Print(x) Print(x)
#else
# xác định In(x)
#endif
// Mở rộng thành câu lệnh trống nếu DEBUG_FLAG không được đặt và
// gọi tới lệnh In(thứ gì đó) nếu DEBUG_FLAG được đặt.
In (cái gì đó);
Điều trên phụ thuộc vào In
là một hàm được khai báo/xác định. Nếu nó được đặt khi xác định macro DEBUG_FLAG
, macro sẽ được "thay thế" bởi chính nó, nhưng việc mở rộng bộ tiền xử lý C không đệ quy, do đó việc mở rộng chỉ xảy ra một lần, gây ra lệnh gọi In
.
Tôi là một lập trình viên xuất sắc, rất giỏi!