Có cách nào để chuyển đổi phần mở rộng typeof
gcc của một chuỗi, ví dụ:Chuyển đổi typeof chuỗi
#define printType(a) printf("%s", #typeof(a))
Vì vậy mà tôi có thể làm:
int a = 4;
printf("Type of a is: ");
printType(a);
Và nhận được đầu ra của:
Type of a is: int
Có thể sử dụng điều này như sau:
#include <stdio.h>
#define indirect_print(a) print_##typeof(a)(a)
void print_int(int *i) {
printf("%d", *i);
}
void print_char(char *c) {
printf("%c", *c);
}
int main(void) {
char C = 'C';
int I = 100;
{
char *a = &C;
indirect_print(a);
}
{
int *a = &I;
indirect_print(a);
}
return 0;
}
Nếu có thể, nó sẽ hoạt động cho tất cả các loại bao gồm cấu trúc và công đoàn, mà không phải dựa vào việc thêm mọi loại vào danh sách theo cách thủ công.
Bạn có thể thử sử dụng một kiểu generic vĩ mô? –
Tại sao bạn muốn làm điều này? –