“typedef char CHAR [10];”是什么意思?

时间:2015-07-20 20:36:25

标签: c++ typedef

遇到了一段代码,它定义并使用了类似下面的typedef:

typedef char CHAR[10];
void fun(std::string s) {}
int main()
{
    CHAR c;
    fun(c);
 }

奇怪的是这很有效。我的问题是为什么定义和使用这样的typedef以及它是如何工作的。在我看来,CHAR本身不起作用,它应该始终是CHAR [10]。

此外,如果我改变乐趣声明接受std :: string&而不是std :: string,它会抛出编译错误。我不知道为什么。

2 个答案:

答案 0 :(得分:7)

这是C声明符语法的一个令人困惑的部分,并没有做你认为它做的事情。

抛弃逻辑并按照the spiral rule

你认为它做什么

使CHAR[10]表示char

实际做什么

使CHAR表示char[10]

这就是为什么单独使用CHAR""如果非常愚蠢,这里完全有效。我的意思是,严肃地说,首先对固定大小的数组进行类型设置非常愚蠢,但命名为CHAR需要饼干。

答案 1 :(得分:4)

typedef char CHAR[10];
void fun(std::string s) {}
int main()
{
    CHAR c;
    fun(c);
}

相当于

void fun(std::string s) {}
int main()
{
    char c[10];
    fun(c);
}

从语法上讲,这是正确的代码,因为std::string可以从char*构造。但是,由于c尚未初始化,因此该代码导致未定义的行为。