簡體   English   中英

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

[英]What is the meaning of “typedef char CHAR[10];”?

遇到了一段定義和使用typedef的代碼,如下所示:

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

奇怪的是,這可行。 我的問題是為什么要定義和使用像這樣的typedef及其工作方式。 在我看來,僅CHAR不應起作用,而應始終為CHAR [10]。

此外,如果我更改fun聲明以接受std :: string&而不是std :: string,它會引發編譯錯誤。 我不知道為什么。

這是C聲明程序語法的一個令人困惑的部分,它沒有執行您認為的操作。

拋棄邏輯並遵循螺旋規則

您認為它能做什么

使CHAR[10]表示char

它實際上是做什么的

使CHAR char[10]

這就是為什么“非常獨自”使用CHAR在這里完全有效的原因。 我的意思是說真的,首先,對一個固定大小的數組進行typedeff是很愚蠢的,但是將其命名為CHAR就是餅干。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM