C 使用 typedef 或 #define 定义结构

标签 c struct structure

我对两种 Action 的表现有疑问(以任何方式)这个问题很简单,但有一个大问题(当有两种方法时,哪一种更好) 我想用C语言创建结构。这对我来说有两个选择

1-在.h文件中定义它并在程序中使用它

typedef struct {
    int id;
} myStructure;

2 - 使用这种定义来定义这个结构

#define myStructure struct { int id; }

哪种方式更好?我知道我们更多地使用方式1,但我不知道为什么我认为第二种方式是定义的母方式 请比较这种方式(无论如何性能)

更新 1:
谢谢您的回答。在最后两个响应中,我得到了这个原因,如果我们想在函数参数中使用该变量,我们就不能使用第二种方法。这是真的,但只有一点。我们也可以将该函数设为宏函数,这样就可以解决问题。像这样的东西

#define myStructure struct { int id; }
#define FUNC(__MYSTRUCTURE)     printf("%d", __MYSTRUCTURE.id)
int main() {
myStructure var1;
var1.id = 542;
FUNC(var1);
}

最佳答案

这两种方式实际上没有任何共同点。例如,如果使用宏版本,以下代码无效

myStructure *p1 = 0;
myStructure *p2 = 0;
p1 = p2; // <- Type mismatch

typedef 版本的行为将“按预期”。这意味着您的宏版本并未真正定义以任何方式“可重用”的类型。它可能“适用于”某些利基、狭窄和受限的目的,但它的可用性远不及 typedef 版本。

关于C 使用 typedef 或 #define 定义结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344441/

相关文章:

c - 为什么 2 的 32 次方会产生以字节而不是位为单位的数字?

c++ - 如果可以,我可以从文件中检索结构吗?

c++ - 使用 C++ 动态分配结构数组

c - 采用指向结构的指针和要显示的变量的函数(实际上类似于 python 中的 'in' 运算符)

php - 编译错误: "g++: error trying to exec ' cc1plus': execvp: No such file or directory"

c - 删除链接结构的值

c - 错误 : request for member in something not a structure or union

c - C 中的冒泡排序函数

c - 如何在 vim 中自动格式化/缩进 C 代码?

MySQL时间表数据结构