C区分函数和结构

时间:2018-11-15 16:13:05

标签: c

在我的操作系统(vxWorks)中,有一个名为stat的结构和一个名为stat的函数。

如果我memset((void*)&myStruct, 0, sizeof(stat));

我使用的是函数的大小还是struct的大小? IDE将 stat 加粗,就好像它是一个函数一样。我该如何暗示使用该结构?

1 个答案:

答案 0 :(得分:5)

struct标签生活在不同名称空间中-它们不命名类型。确实还有一个名为stat的函数。

您必须使用

sizeof (struct stat)

获取struct with the tag stat的大小。

如果您使用sizeof (stat)(即sizeof stat),则stat 函数将转换为指向函数的指针,这就是{{1 }}计算,结果例如4或8,具体取决于指针的宽度。


如果有一个 typedef ,则可以使用它代替sizeof,而无需使用struct stat关键字:

struct

甚至更好:删除对typedef struct stat STAT; ... sizeof (STAT) 的强制类型转换-在C语言中是不必要的。并且将(void*)变量代替:

sizeof

请注意,memset(&myStruct, 0, sizeof myStruct); 仅需要为类型而不是表达式添加括号。