对 #define 和 typedef 感到困惑

发布于 2024-10-25 07:33:39 字数 153 浏览 2 评论 0原文

#define T Stack_T
typedef struct T *T;

那么struct T中的T是什么意思,是由#define还是typedef定义的呢?

#define T Stack_T
typedef struct T *T;

Then what does T in struct T mean,the one defined by #define or typedef?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

最偏执的依靠 2024-11-01 07:33:39

#define 指令在编译过程的早期被替换(翻译阶段 4,编译实际上直到阶段 7 才发生,这些阶段以及期间发生的情况在标准第 5.1.1.2 节中有详细说明) )。

#define 只会将 T 预处理标记更改为 Stack_T

typedef 的影响将把它变成:

typedef struct Stack_T *Stack_T;

接下来,Stack_T 被定义为一个类型,一个指向另一个类型的指针struct Stack_T 的。 Stack_T 和 struct Stack_T 是两个独立的东西。

#define directives are substituted early on in the compilation process (translation phase 4, compilation doesn't actually occur until phase 7, these phases and what happens during them are detailed in the standard, section 5.1.1.2).

That #define will simply change T pre-processing tokens into Stack_T.

The effect of that on the typedef will be to turn it into:

typedef struct Stack_T *Stack_T;

Following that, Stack_T is defined as a type, a pointer to another type of struct Stack_T. The Stack_T and struct Stack_T are two separate things.

孤独陪着我 2024-11-01 07:33:39

预处理器只进行文本替换,因此代码看起来像这样

typedef struct Stack_T *Stack_T;

,所以代码中的每个 T 首先被替换为 Stack_T,之后编译器启动,看到typedef 并使用struct Stack_T*

最好知道 struct TypeType 仅在 C++ 中相同,而在 C 中则不然。

The preprocessor does only do text-substitutions, so that code would look like

typedef struct Stack_T *Stack_T;

So every T in your code is first replaced to Stack_T, and after that your compiler kicks in, sees the typedef and uses struct Stack_T*.

It might be good to know that struct Type and Type are only the same in C++, not in C.

若言繁花未落 2024-11-01 07:33:39

由于 #define 在预编译中处理,而 struct 在编译中处理,因此预编译后您将得到 typedef struct T *T;看起来像这样:typedef struct Stack_T *Stack_T;

Since #define is processed in pre-compilation and struct in compilation, after the pre-compilation you'll have typedef struct T *T; looks like that: typedef struct Stack_T *Stack_T;

筱果果 2024-11-01 07:33:39

T 代表 Stack_T,因此,您可以将 typedef 读作:

typdef struct Stack_T *Stack_T;

因此代码中的每个 T 都会替换为 Stack_T > 在编译器编译期间。

The T represents Stack_T so, you can read the typedef as:

typdef struct Stack_T *Stack_T;

so every T in your code is replaced as Stack_T during compiler compilation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文