久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

typedef可以成為你的朋友

 黃南山 2018-02-02

typedef static char int8;這個聲明正確嗎,?

A:err

所以上面那個聲明是錯誤的,。

 

typedef為一種類型引入新的名字,而不是為變量分配空間,,它并沒有引入新的類型,,而是為現(xiàn)有的類型取個新名字。在說到typedef時,,有一個很好的例子是signal()函數(shù)聲明,,但是,一般而言只有極少數(shù)情況才會使用到這樣的技巧,,這里就不再贅述,,我們應(yīng)該知道更多關(guān)于typedef對于大多數(shù)程序員應(yīng)該知道的事,。

說到typedef就不能不說一下它的缺點。它同樣具有與其他聲明一樣的混亂語法,??梢园褞讉€聲明器塞到一個聲明中去,例如:

typedef int *ptr,(*fun)(void),arr[5];

ptr是指向int的指針類型,;

fun是指向返回值為int的參數(shù)為void的函數(shù)的指針類型,;

arr是長度為5的int型數(shù)組類型。

上面這樣的寫法應(yīng)該盡量避免使用,。

甚至typedef的位置不是必須放在聲明的開始部分,,例如:

復(fù)制代碼
#include<stdio.h>

int main(void)
{
    int typedef a;
    a b=5;
    printf("%d\n",b);
    return 0;
}
復(fù)制代碼

也不要把typedef嵌入到聲明的中間部分,如下所示:

unsigned  long typedef int volatile *kumquat;

這樣的表達式會讓代碼變得不好閱讀?。,。?/span>

我們使用typedef,,是為了使代碼更易于閱讀,,給已有類型取一個我們喜歡的別名,不要濫用或者亂用它,。

再來看看typedef和define的區(qū)別

最基本的區(qū)別:

#define mychar char*
mychar a,b;
typedef char * yourchar;
yourchar c,d;

define是純文本替換,,如果用define定義的類型定義多個對象,那樣只有第一個對象才是原本define的類型,,在上面的例子中,,b是char不是char*類型,但是c和d都是char *類型,。

還有一個區(qū)別:

typedef是一種徹底的“封裝”,,在聲明它之后不能再往里面增加別的東西,這和宏不同,。

#define peach  int
    unsigned peach i;//right
typedef int banana;
    unsigned banana j;//err

知道這些之后,,我們平時書寫代碼就應(yīng)該遵循一些規(guī)范,把typedef放在聲明的開始,,并且一個類型用一個typedef修飾,,不要在typedef類型前后加其他聲明器。

C語言存在多種名字空間:
,。標簽名

,。標簽:這個名字空間用于所有的結(jié)構(gòu)、枚舉,、聯(lián)合,。

。成員名:每個結(jié)構(gòu)或聯(lián)合都有自身的名字空間

,。其他

在同一個名字空間里,,任何名字必須具有唯一性,,但在不同的名字空間里可以存在相同的名字。

由于在不同的名字空間使用同一個名字是合法的,,所以這樣的代碼是可以通過編譯的,,但還是不建議這樣書寫。

struct foo{int foo,;}foo,;

 typedef struct baz{int baz;} baz,;

struct baz var1,;

baz var2;

這些都是合法的,。只有結(jié)構(gòu)標簽?zāi)軌蛟谝院蟮穆暶髦惺褂茫ㄗ⒁饬耍,。?/span>可以用typedef定義一個結(jié)構(gòu)類型,這樣可以省略struc的書寫,,也可以直接用struct 標簽 變量的方式,就算使用了typedef也一樣,。

在使用typedef的時候,,應(yīng)該盡量避免混淆,做到思路清晰,,代碼可讀性高,。

再看一例:

復(fù)制代碼
#include<stdio.h>
typedef char * test;
int main(void)
{
    const char * str=0;
    str++;// 正確底層const,常量指針,,該指針指向的對象是常量,,但指針自身可以改變
    const test string=0;
    string++;//錯誤,typedef出的是類型別名 char *,,此時加const修飾為指針常量,,即該指針是常量。
    return 0;
}
復(fù)制代碼

前面說了,,不要在使用了typedef的標識符前后再加修飾(上面例子在typedef聲明的別名test前又加了一個const修飾),,那樣有可能和你想的不同。知道可能的坑,,并善于利用typedef帶給我們的便利,,typedef可以成為你的朋友。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多