Tôi không chắc chắn những gì bạn muốn đạt được, nhưng bạn có thể sử dụng X-Macros và có tiền xử lý làm lặp trên tất cả các lĩnh vực của một cấu trúc:
//--- first describe the structure, the fields, their types and how to print them
#define X_FIELDS \
X(int, field1, "%d") \
X(int, field2, "%d") \
X(char, field3, "%c") \
X(char *, field4, "%s")
//--- define the structure, the X macro will be expanded once per field
typedef struct {
#define X(type, name, format) type name;
X_FIELDS
#undef X
} mystruct;
void iterate(mystruct *aStruct)
{
//--- "iterate" over all the fields of the structure
#define X(type, name, format) \
printf("mystruct.%s is "format"\n", #name, aStruct->name);
X_FIELDS
#undef X
}
//--- demonstrate
int main(int ac, char**av)
{
mystruct a = { 0, 1, 'a', "hello"};
iterate(&a);
return 0;
}
này sẽ in:
mystruct.field1 is 0
mystruct.field2 is 1
mystruct.field3 is a
mystruct.field4 is hello
bạn cũng có thể thêm tên của hàm được gọi trong X_FIELDS ...
những gì hoạt động nào bạn muốn làm cho mỗi người? –
Tôi không thể thấy lý do tại sao bạn muốn lặp qua các loại khác nhau. Không phải mỗi loại yêu cầu một hoạt động khác nhau? Vui lòng giải thích. –
tò mò, tôi có một hàm chấp nhận một giá trị với thứ tự childrens của một sctruct, ví dụ, chức năng ("string1", "string2", 1 // đây là chỉ số của trẻ em struct) trong phần thân hàm, tôi biết, nơi tôi sẽ giữ các thông số dây, tôi biết rằng tôi có thể vượt qua con trỏ đến trẻ em mà tôi muốn, nhưng, tôi nghĩ rằng đó là một cách khác. cảm ơn cho tất cả các câu trả lời – drigoSkalWalker