当结构名称存储在 char 数组中时,如何声明结构?

How to declare a struct, when struct name is stored in a char array?

我是 C 编程的初学者,这是一个结构定义

struct items
{
    char *colour;
    char *type;
};

我想声明结构,结构名称是其 colourtype 的值。 colourtype 都是已知变量。

例如,如果 colour = redtype = hat,程序将声明 struct items red_hat = {red, hat};

我尝试了以下方法:

char item_name[32];
snprintf(item_name, sizeof(item_name), "%s_%s", colour, type);
struct items item_name = {colour, type};

但是这种方法会产生一个编译器错误:“item_name”的冲突类型。我意识到编译器使用 item_name 作为结构名称而不是存储在 item_name.

中的字符串

我应该修复什么?

您要实现的目标称为 Metaprogramming,其中涉及修改自身的代码。 C 编程语言专注于修改和处理数据,而不是源代码,即变量值。自动生成变量名称对您没有任何好处,因为它们不能用作编译程序的一部分(它们只是您的标签,程序员跟踪数据)并且这是根本错误的尝试这样做的方法。在您提供的代码中,在调用 snprintf() 之后,char 数组 item_name 被分配了值 "red_hat",但它没有被替换为您接下来声明的结构的变量名称。因此,您的结构的 name 只是 item_name,与您之前声明的 char 数组相同。 C 不允许重新分配变量,因此编译器会生成 conflicting types 错误。 你似乎混淆了 source code with the binary program that is generated by the compiler. The latter operates only on values (data such as chars, ints and pointers expressed in binary) that you assigned to the named variables.

尽管我的目标是向您阐明这些概念,但请随意提出看似愚蠢的问题。您还可以从修改核心编程概念中受益匪浅,其中包括我提到的那些。