一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - 關于C編程語言,幾乎沒有人知道的事

關于C編程語言,幾乎沒有人知道的事

2020-10-11 23:02今日頭條編程重度愛好者 編程技術

首先話不多說,直接給您去介紹咯。在C語言中,您可以在類型轉換中,運算符內部,函數聲明中聲明新類型。sizeof

首先話不多說,直接給您去介紹咯。

關于C編程語言,幾乎沒有人知道的事

在C語言中,您可以在類型轉換中,運算符內部,函數聲明中聲明新類型。sizeof

  1. int a = sizeof(enum E { A, B, C }) + (enum X { D, E, F }) 0;  
  2. enum E e = B;  
  3. int b = e + F;  

在C循環中,“頭”和循環體是兩個單獨的(嵌套的)作用域

  1. for (int i = 0; i < 10; ++i)  
  2. {   int i = 42; // <-C語言中的OK,聲明其他局部變量  
  3. }  

這不同于C ++,后者兩者都形成一個范圍。

可以在C中進行[遞歸]調用main

在C語言中,可以在聲明中顯式地重復cv限定詞

  1. const const const const int i = 42; 

在C中,您可以在相同的翻譯單元中一次又一次地定義相同的文件作用域對象,只要這些定義仍然是暫定的即可(不要多次包含初始化器)

  1. int i;  
  2. int i;  
  3. int i, i, i, i;  

與流行的看法相反,C不支持不同指針類型之間以及整數和指針類型之間的隱式轉換

  1. int *p = 0;  
  2. double *pd = p; //<-在C中不允許 
  3. char *pc = 123;// <-在C中不允許 

但是支持隱式的指針往返轉換void *。

將運算符應用于可變修改后的類型時,將sizeof在運行時對其進行評估

  1. int i = 0;  
  2.   sizeof(int [++ i]); //運行時`sizeof`將使`i`遞增  
  3.    int a [20];  
  4.   sizeof(a [++ i]); //編譯時`sizeof`不會使`i`遞增  

typedef用C -declaration實際上可以生成可執行代碼,如果聲明為可變類型(一個VLA)。因此,繞過該聲明進入該聲明的范圍是非法的typedef

  1. goto skip;  
  2.  int n = 42;  
  3. typedef int A[n];  
  4.  skip:;  

即使main應該聲明為返回int,也不需要顯式地return從中進行任何操作int main()。如果控制從末尾流出main,則其行為就像return 0;

運算符sizeof有兩種獨立的語法:一種用于類型,另一種用于表達式。后者沒有()圍繞其論點

  1. int a;  
  2. sizeof a; // 不需要在`a`附近使用`()` 

從C99語句(如if,等)開始for,while創建自己的隱式塊。在C99塊之前,僅由的顯式對創建{}。

標準C從未允許人們在聲明中完全省略decl-specifier-seq 。即使在具有“隱式int”規則的C89 / 90中,也無法將函數聲明為foo()。你可以做extern foo()或者const foo(),例如,而不是只foo()。

帶空的函數聲明()是K&R樣式的聲明。不建議使用K&R樣式的聲明。如果您的函數沒有參數,則將其聲明為(void),而不是()。

函數聲明和函數原型不是一回事。在現代C語言中,需要使用函數聲明。但是功能原型不是。

即使在函數參數列表中,諸如int *array和的聲明int array[]通常是“等效的”,后一種形式仍要求數組元素類型完整,而前一種則不需要

  1. struct Incomplete;  
  2. void foo(struct Incomplete *array);  
  3. void bar(struct Incomplete array[]); 

在函數參數列表中聲明指針時,可以將指針本身聲明為 const

  1. void foo(int *const array); 

在C89 / 90中,使用參數聲明的“等效”數組形式時,以前不可能聲明相同類型的常數。但是,由于C99,可以通過const在[]

  1. void bar(int array[const]); // 與?int * const array`相同 

使用函數參數聲明的數組形式時,數組的大小通常無關緊要

  1. void foo(int array[5]); //等同于`int array []`。`5`被忽略。 

但是,當size帶有關鍵字時,static它充當編譯器的提示。它說實際的數組至少會那么大。它可能/將改善編譯器優化

  1. void foo(int array [static 5]);   
  2. //從類型上講,它仍然等效于`int array []`  
  3. //但是編譯器會提示  

聲明為的位字段int不一定是帶符號的。這是C語言中的一個上下文,其中plainint不一定與相同signed int。一個int位字段可能被符號或無符號-這個行為應該是實現定義的。因此,始終明確指定您的意圖始終是一個好習慣:將位字段明確聲明為signedor unsigned,而不是簡單聲明int。

do … while是唯一以。結尾的迭代語句形式;。

在C語言中可以對類型為Object的對象進行非定義聲明 void

  1. extern void v; 

但是,由于類型不完整,因此無法為該聲明提供匹配的定義void。

函數參數列表中提到的未知結構類型被視為新類型的聲明。但是,此類型的范圍僅限于該函數聲明。同一功能的下一個聲明將不可見或不知道它。例如,以下聲明序列乍一看“看起來不錯”,但實際上是無效的

  1. // 此時未聲明“ struct S”類型 
  2. void foo(struct S *p);  
  3. void foo(struct S *p)  
  4. {  
  5. }  

struct S第一個聲明提到的類型是原型的局部變量,與第二個聲明完全無關struct S。因此,這些函數聲明是沖突的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲AV 日韩 国产 有码 | 538免费精品视频搬运工 | 四虎精品影视 | coolgay男男gayxxx| 国产人人草 | 日本五级床片全都免费播放 | 女主被男主做哭失禁高h | 女教师的一级毛片 | 欧美添下面视频免费观看 | 国产精品永久免费视频观看 | 日本视频免费在线观看 | 边吃胸边膜下刺激免费男对女 | 日日视频 | 亚洲美女人黄网成人女 | 亚洲欧美日韩天堂在线观看 | 精品国产91高清在线观看 | 日韩精品一区二区三区中文在线 | 99ri在线精品视频在线播放 | 好大好湿好硬好爽好深免费视频 | 操b图片| 日本一在线中文字幕天堂 | 极品91 | 俺去啦最新地址 | 欧美涩区 | 臀控福利大臀的网站 | 和直男装修工在工地啪 | 福利社在线免费观看 | 国产高清不卡码一区二区三区 | 国产成人综合一区人人 | 丝瓜污污视频 | 麻豆网站在线免费观看 | 色欧美亚洲 | 99久久精品国内 | 欧美日韩一区二区综合 | 成年视频在线观看免费 | 含羞草传媒一天免费看下 | 被强迫调教的高辣小说 | 亚洲小视频 | 亚洲欧美在线免费观看 | 欧美亚洲国产综合在线 | 免费看片黄色 |