首先,没有struct DB
; 有一个类型名称DB
标识未标记的结构类型,但它与struct DB
.
如何访问元素取决于变量声明:
DB db1 = ...;
DB *db2 = ...;
使用 variable db1
,您可以使用以下方式访问第三个元素的名称:
printf("%s\n", db1.db[2].name);
使用 variable db2
,您可以使用以下方式访问第三个元素的名称:
printf("%s\n", db2->db[2].name);
您可以使用以下方法定义一个采用这些类型的函数:
void magic_function(DB db1, DB *db2, DBEntry de1, DBEntry *de2)
{
printf("%s\n", db1.db[0].name);
printf("%s\n", db2->db[0].name);
printf("%s\n", de1.name);
printf("%s\n", de2->name);
}
您可以使用以下方法在标头中声明它:
extern void magic_function(DB db1, DB *db2, DBEntry de1, DBEntry *de2);
就个人而言,我更喜欢extern
那里与在同一个标头中声明的那些罕见的全局变量的声明对称extern
,但它实际上不是必需的(extern
如果省略则假定)。如果该函数仅从单个源文件中引用,那么它static
当然应该是 (并且没有在任何头文件中声明)。