Difference between typedef struct and struct in a function in C
我得到了下面要分析的代码,我不太确定函数中的typedef结构和struct。在全局中,以下代码是:
1 2 3 4 5 | typedef struct { float width, height, start; unsigned int *pixmap; }arguments; |
但是当我在下面的同一个程序中查看函数时,我会发现:
1 2 3 4 5 6 | struct arguments{ float start; float width; float height; unsigned int *pixmap; }; |
我的问题是,是否有必要在函数中添加这个
不一定。由于该结构是在全局范围内声明的,因此您仍然可以使用它。请记住
由于标准定义了术语,所以您所提供声明的数据类型不是"兼容类型",因此它们不能互换使用。要使结构类型兼容,它们不仅必须具有相同的成员名称和类型,而且必须具有相同的标记。在最后一点上,这两个观点不同。
尤其是,您的
另一个声明声明声明了一个带有标记
1 2 3 4 | struct arguments my_arguments; my_arguments.width = 5; // ... |
My question is, is it necassary to add this struct arguments in the function since i already declared it in global?
C没有全局声明。它有文件范围声明,默认情况下,这些声明函数和具有外部链接的对象,这意味着可以从程序中的任何地方访问它们。这不完全一样。因此,无论您在何处使用这两种类型中的任何一种,它的声明都必须在范围内。通常将共享声明放在头文件中,以便于满足这些要求。在任何情况下,其中一种类型的声明都不能用作另一种类型的声明。
但是,您可以考虑通过在一个声明中标记typefed结构来使它们兼容…
1 2 3 4 5 | typedef struct arguments // <--- note the tag here { float width, height, start; unsigned int *pixmap; } arguments; |
…或者两个…
1 2 3 4 5 6 7 | struct arguments { float width, height, start; unsigned int *pixmap; }; typedef struct arguments arguments; |
任何一种选择都使