### 2. 基本語法
上一小節我們知道了一個簡單的小應用由哪些部分組成,這將有助于我們理解 C 語言的其它基本的構建塊。
#### C 的令牌(Token)
c 程序由各種令牌組成,令牌可以是關鍵字、標識符、常量、字串符值、或者是一個符號。
~~~
printf("Hello, World! \n");
~~~
這五個令牌分別是:
~~~
printf
(
"Hello, World! \n"
)
;
~~~
#### 分號 ;
在 **C 程序中,分號是語句結束符。也就是說,每個語句必須以分號結束。它表明一個邏輯實體的結束**。
例如,下面是兩個不同的語句:
~~~
printf("Hello, World! \n");
return 0;
~~~
#### 注釋
**C 語言有兩種注釋方式:**
~~~
// 單行注釋
~~~
以//開始的單行注釋,這種注釋可以單獨占一行。
~~~
/* 單行注釋 */
/*
多行注釋
多行注釋
多行注釋
*/
~~~
/\* \*/這種格式的注釋可以單行或多行。
>[info]您不能在注釋內嵌套注釋,注釋也不能出現在字符串或字符值中。
#### 標識符
**C 標識符是用來標識變量、函數,或任何其他用戶自定義項目的名稱**。一個標識符以字母 A-Z 或 a-z 或下劃線 \_ 開始,后跟零個或多個字母、下劃線和數字(0-9)。
C 標識符內不允許出現標點字符,比如 @、$ 和 %。C 是**區分大小寫**的編程語言。因此,在 C 中,*Manpower*和*manpower*是兩個不同的標識符。下面列出幾個有效的標識符:
~~~
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
~~~
#### 關鍵字
下面我們來看一下 C 中的關鍵字,這些關鍵字不能作為常量名,變量名或者其它標識符名稱(跟 Java 類似)。
| 關鍵字 | 說明 |
| --- | --- |
|auto |聲明自動變量 |
|break | 跳出當前循環 |
|case | 開關語句分支 |
|char| 聲明字符型變量或者函數返回值類型 |
|const| 聲明只具可讀變量 |
|continue| 結束當前循環,開始下一個循環 |
|default| 開關語句中的其它分支 |
|do| 循環語句的循環體 |
|double| 聲明雙進度浮點型變量或者函數返回值類型 |
|else| 條件語句否定分支|
|enum | 聲明枚舉類型 |
|extern | 聲明變量或函數是在其它文件或本文件的其他位置定義 |
|float | 聲明浮點型變量或者函數返回值類型 |
|for | 一種循環語句 |
|goto |無條件跳轉語句 |
|if |條件語句 |
|int |聲明整型變量或函數 |
|long |聲明長整型變量或函數返回值類型 |
|register | 聲明寄存器變量|
|return |子程序返回語句 |
|short |聲明短整型變量或者函數 |
|signed |聲明有符號類型變量或者函數 |
|sizeof |計算數據類型或者變量長度(即所占字節數) |
|static |聲明靜態變量 |
|struct | 聲明結構體類型|
|switch |用于開關語句 |
|typedef | 用以給數據類型取別名 |
|unsigned| 聲明無符號類型變量或函數 |
|union| 聲明共用體類型 |
|void | 聲明函數無返回值或無參樹,聲明無類型指針 |
|volatile | 說明變量在程序執行中可被隱含地改變 |
|while | 循環語句的循環條件 |
#### C99 新增關鍵字
| | | | | |
| --- | --- | --- | --- | --- |
| _Bool |_Complex | _Imaginary | inline | restrict |
#### C11 新增關鍵字
| | | | | |
| --- | --- | --- | --- | --- |
| _Alignas |_Alignof | _Atomic | _Generic | _Noreturn |
| _Static_assert |_Complex | _Thread_local | | |
#### C 中的空格
**只包含空格的行,被稱為空白行,可能帶有注釋,C 編譯器會完全忽略它**。
在 C 中,空格用于描述空白符、制表符、換行符和注釋。空格分隔語句的各個部分,讓編譯器能識別語句中的某個元素(比如 int)在哪里結束,下一個元素在哪里開始。因此,在下面的語句中:
~~~
int age;
~~~
在這里,**int 和 age 之間必須至少有一個空格字符(通常是一個空白符),這樣編譯器才能夠區分它們**。另一方面,在下面的語句中:
~~~
fruit = apples + oranges; // 獲取水果的總數
~~~
fruit 和 =,或者 = 和 apples 之間的空格字符不是必需的,但是為了增強可讀性,您可以根據需要適當增加一些空格。
- 前言
- JNI基礎知識
- C語言知識點總結
- ①基本語法
- ②數據類型
- 枚舉類型
- 自定義類型(類型定義)
- ③格式化輸入輸出
- printf函數
- scanf函數
- 編程規范
- ④變量和常量
- 局部變量和外部變量
- ⑤類型轉換
- ⑥運算符
- ⑦結構語句
- 1、分支結構(選擇語句)
- 2、循環結構
- 退出循環
- break語句
- continue語句
- goto語句
- ⑧函數
- 函數的定義和調用
- 參數
- 函數的返回值
- 遞歸函數
- 零起點學通C語言摘要
- 內部函數和外部函數
- 變量存儲類別
- ⑨數組
- 指針
- 結構體
- 聯合體(共用體)
- 預處理器
- 預處理器的工作原理
- 預處理指令
- 宏定義
- 簡單的宏
- 帶參數的宏
- 預定義宏
- 文件包含
- 條件編譯
- 內存中的數據
- C語言讀文件和寫文件
- JNI知識點總結
- 前情回顧
- JNI規范
- jni開發
- jni開發中常見的錯誤
- JNI實戰演練
- C++(CPP)在Android開發中的應用
- 掘金網友總結的音視頻開發知識
- 音視頻學習一、C 語言入門
- 1.程序結構
- 2. 基本語法
- 3. 數據類型
- 4. 變量
- 5. 常量
- 6. 存儲類型關鍵字
- 7. 運算符
- 8. 判斷
- 9. 循環
- 10. 函數
- 11. 作用域規則
- 12. 數組
- 13. 枚舉
- 14. 指針
- 15. 函數指針與回調函數
- 16. 字符串
- 17. 結構體
- 18. 共用體
- 19. typedef
- 20. 輸入 & 輸出
- 21.文件讀寫
- 22. 預處理器
- 23.頭文件
- 24. 強制類型轉換
- 25. 錯誤處理
- 26. 遞歸
- 27. 可變參數
- 28. 內存管理
- 29. 命令行參數
- 總結
- 音視頻學習二 、C++ 語言入門
- 1. 基本語法
- 2. C++ 關鍵字
- 3. 數據類型
- 4. 變量類型
- 5. 變量作用域
- 6. 常量
- 7. 修飾符類型
- 8. 存儲類
- 9. 運算符
- 10. 循環
- 11. 判斷
- 12. 函數
- 13. 數學運算
- 14. 數組
- 15. 字符串
- 16. 指針
- 17. 引用
- 18. 日期 & 時間
- 19. 輸入輸出
- 20. 數據結構
- 21. 類 & 對象
- 22. 繼承
- 23. 重載運算符和重載函數
- 24. 多態
- 25. 數據封裝
- 26. 接口(抽象類)
- 27. 文件和流
- 28. 異常處理
- 29. 動態內存
- 30. 命名空間
- 31. 預處理器
- 32. 多線程
- 總結
- 音視頻學習 (三) JNI 從入門到掌握
- 音視頻學習 (四) 交叉編譯動態庫、靜態庫的入門學習
- 音視頻學習 (五) Shell 腳本入門
- 音視頻學習 (六) 一鍵編譯 32/64 位 FFmpeg 4.2.2
- 音視頻學習 (七) 掌握音頻基礎知識并使用 AudioTrack、OpenSL ES 渲染 PCM 數據
- 音視頻學習 (八) 掌握視頻基礎知識并使用 OpenGL ES 2.0 渲染 YUV 數據
- 音視頻學習 (九) 從 0 ~ 1 開發一款 Android 端播放器(支持多協議網絡拉流/本地文件)
- 音視頻學習 (十) 基于 Nginx 搭建(rtmp、http)直播服務器
- 音視頻學習 (十一) Android 端實現 rtmp 推流
- 音視頻學習 (十二) 基于 FFmpeg + OpenSLES 實現音頻萬能播放器
- 音視頻學習 (十三) Android 中通過 FFmpeg 命令對音視頻編輯處理(已開源)