gpt4 book ai didi

c - 在 C 中使用指向 typedef 类型的指针作为指向原始类型的指针是未定义的行为吗?

转载 作者:太空狗 更新时间:2023-10-29 16:05:42 24 4
gpt4 key购买 nike

假设有如下代码:

#include <stdio.h>

typedef int myIntType;

int main()
{
int a;
myIntType *ptr = &a;

*ptr = 1;

printf("%d\n", a);

return 0;
}

这会调用未定义的行为吗?

在任何合理的解释下,我希望这应该简单地将 a 的值设置为 1 并因此在 上打印行 1 >标准输出

在 Mac OS X 上使用 gcc -Wall -Wextra -pedantic main.c -o main 编译不会产生任何错误或警告,并会在执行时产生预期的输出。

我的问题纯粹是理论性的,我不打算在实际代码中使用这样的结构。

最佳答案

来自 cppreference.com关于 typedef 说明符:

The typedef specifier ... may declare array and function types, pointers and references, class types, etc. Every identifier introduced in this declaration becomes a typedef-name, which is a synonym for the type of the object or function that it would become if the keyword typedef were removed.

换句话说,这与您删除自定义类型并将其替换为 int 完全相同。因此,这是明确定义的行为。 intmyIntType 是 100% 可互换的。

那实际上是一个c++引用。来自 K&R,关于 typedef 的第 6.7 章:

C provides a facility called typedef for creating new data type names. For example, the declaration typedef int Length; makes the name Length a synonym for int. The type Length can be used in declarations, casts, etc., in exactly the same ways that the type int can be.

请注意,K&R 不是最新的标准。另一个答案引用了当前标准。据我所知,typedef 没有改变。

关于c - 在 C 中使用指向 typedef 类型的指针作为指向原始类型的指针是未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com