C语言中的重新定义

C语言中的重新定义,c,C,有人能给我解释一下C语言中的重新定义吗: 有可能这样做吗 typedef struct NumberContainer* ptrNumberContainer; 然后呢 typedef struct NumberContainer* ptrCall; 在连接过程中可能会导致一些问题吗?提前感谢不,这很好-同一基础类型有两个同义词-这很常见。然而,使用typedef来隐藏某个东西是指针这一事实的做法在C中通常被视为不好的做法。不,这完全没关系-同一基础类型有两个同义词-这很常见。然而,通过

有人能给我解释一下C语言中的重新定义吗:

有可能这样做吗

typedef struct NumberContainer* ptrNumberContainer;
然后呢

  typedef struct NumberContainer* ptrCall;

在连接过程中可能会导致一些问题吗?提前感谢

不,这很好-同一基础类型有两个同义词-这很常见。然而,使用typedef来隐藏某个东西是指针这一事实的做法在C中通常被视为不好的做法。

不,这完全没关系-同一基础类型有两个同义词-这很常见。然而,通过使用typedef来隐藏某事物是指针这一事实的做法在C中通常被视为不好的做法。

这不是重新定义。重新定义是指宏定义:

#define FOOBAR 1
#undef FOOBAR
#define FOOBAR 2

这不是重新定义。重新定义是指宏定义:

#define FOOBAR 1
#undef FOOBAR
#define FOOBAR 2

当然有可能。定义两个不同的类型名称来表示相同的内容。

当然有可能。定义两个不同的类型名称来表示相同的内容。

在这种情况下,
ptrCall
将实际引用与
ptrNumberContainer
相同的类型。我认为它们在编译时也是兼容的。例如,你可以说:

ptrNumberContainer p1;
ptrCall p2;
然后,这些措施将起作用:

p1 = p2;
*p1 = *p2;

在这种情况下,
ptrCall
实际上将引用与
ptrNumberContainer
相同的类型。我认为它们在编译时也是兼容的。例如,你可以说:

ptrNumberContainer p1;
ptrCall p2;
然后,这些措施将起作用:

p1 = p2;
*p1 = *p2;

很抱歉,也许我没有正确解释,但尼尔·巴特沃斯明白我的意思。你能给出你的解释吗?@Marcelo当然你在重新定义结构、函数等方面也会有错误?在最初的误读之后,我确实理解了你的问题,目前的答案反映了这一点。正如其他答案所指出的,你所做的是合法的。我要指出的是,您实际上并没有重新定义任何东西(您不能在C中重新定义符号)。我还试图指出表达式的来源。只是为了澄清一下,您不能重新定义编译器符号。你当然可以重新定义宏符号,这正是我要表达的观点。对不起,也许我没有正确解释,但尼尔·巴特沃斯明白我的意思。你能给出你的解释吗?@Marcelo当然你在重新定义结构、函数等时也会有错误。经过一次初步的误读,我确实理解了你的要求,目前的答案反映了这一点。正如其他答案所指出的,你所做的是合法的。我要指出的是,您实际上并没有重新定义任何东西(您不能在C中重新定义符号)。我还试图指出表达式的来源。只是为了澄清一下,您不能重新定义编译器符号。当然,你可以重新定义宏符号,这也是我的观点。请注意,这与eclipse没有任何关系-我再次删除了标记。请注意,这与eclipse没有任何关系-我再次删除了标记。