Bạn có thể làm điều đó cho các chuỗi cụ thể mà bạn biết trước, được trình bày với macro dưới dạng ký hiệu thay vì chuỗi ký tự, chứ không phải cho ký hiệu chung và không cho chuỗi ký tự. Ví dụ:
#include <stdio.h>
#define STRINGIFY(s) # s
#define EXPAND_TO_STRING(x) STRINGIFY(x)
#define TRUNCATE_ObjectT Object
#define TRUNCATE_MrT Pity da fool
#define TRUNCATE(s) EXPAND_TO_STRING(TRUNCATE_ ## s)
int main(){
printf(TRUNCATE(ObjectT)); // prints "Object"
printf(TRUNCATE(MrT)); // prints "Pity da fool"
}
Đó dựa vào các nhà điều hành mã thông báo dán, ##
, để xây dựng tên của macro mở rộng đến các văn bản cắt ngắn (hoặc, thực sự, văn bản thay thế), và các nhà điều hành stringification, #
, để chuyển đổi kết quả mở rộng thành chuỗi ký tự. Có một chút nhu cầu macro cần thiết trong đó, quá, để đảm bảo rằng tất cả các mở rộng cần thiết được thực hiện.
Nguồn
2016-05-20 20:22:28
viết 'do ... while', tính' strlen' và in tối đa 'strlen-2' ... nhưng nó quá rộng ... –
' #define ObjectT "Object" ',' #define MACRO (o) o' .... –
Không có cách nào để làm những gì bạn muốn. Bạn có thể thêm ký tự vào số nhận dạng nhưng bạn không thể xóa chúng. –