
C - 基础语法
C语言作为一种经典且高效的通用编程语言,在系统编程、嵌入式开发和高性能计算等领域有着广泛的应用。其简洁、灵活以及强大的可移植性使得C语言成为许多现代编程语言的基础。
C语言的基本组成 - 令牌(Token)
在C语言中,令牌是构成程序的基本单位。编译器在对程序进行词法分析时,会将源代码分解为一系列令牌。C语言中的令牌主要包括:
关键字(Keywords):C语言预定义的保留字,不能作为变量名或函数名。
标识符(Identifiers):用于命名变量、函数或数组,由字母、数字、下划线组成,但第一个字符必须是字母或下划线。
常量(Constants):程序中不可改变的固定值,分为整型、浮点型、字符型、枚举常量等。
字符串字面量(String Literals):用双引号包围的一系列字符,以
\0
结尾。运算符(Operators):执行算术、逻辑、关系等运算的符号。
分隔符(Separators):用于分隔语句或表达式,如逗号、分号、括号等。
复杂C程序结构示例
下面是一个更加详细的程序示例:
#include <stdio.h> // 包含标准输入输出库
#define PI 3.14159 // 宏定义常量
// 函数声明
int add(int a, int b);
int main() {
int num1, num2, sum; // 变量声明
// 用户输入
printf("Enter two integers: ");
scanf("%d %d", &num1, &num2);
// 调用函数
sum = add(num1, num2);
// 输出结果
printf("Sum: %d\n", sum);
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
头文件包含
头文件通常在程序的开头使用
#include
指令包含。头文件提供了函数和库的声明,如标准输入输出库<stdio.h>
、标准库<stdlib.h>
等。它们定义了函数、宏、常量等使程序能够使用预定义的库函数。示例:
#include <stdio.h>
宏定义
宏是通过
#define
指令定义的符号常量或代码片段。宏在编译前由预处理器替换为其定义的内容。常用于定义常量或者复杂的代码块。示例:
#define PI 3.14159
函数声明
在 C 语言中,函数的声明必须在函数定义或调用之前。声明提供了函数的返回类型、函数名和参数列表,以便编译器知道如何调用该函数。
示例:
int add(int a, int b);
主函数
main()
函数是 C 程序的入口点,每个 C 程序都必须包含一个main()
函数。程序从main()
开始执行,返回值通常为0
表示程序成功执行。示例:
int main() { ... }
变量声明
在 C 程序中,所有变量必须在使用前声明。变量可以在
main()
函数中声明,也可以在其他函数中或全局声明。示例:
printf("Enter two integers: "); sum = add(num1, num2);
语句和表达式
语句是 C 程序的基本执行单元,通常是函数调用、赋值、控制语句(如
if
、for
等)或表达式。表达式是由变量、操作符和常量组成的代码片段。示例:
printf("Enter two integers: "); sum = add(num1, num2);
控制流语句
控制流语句用于控制程序执行的顺序,包括
if
、for
、while
、do-while
等循环和条件分支语句。示例:
if (num1 > num2) { printf("num1 is greater than num2"); }
函数定义
函数定义包含实际的函数体,它描述了函数的具体实现。函数通常包含参数、局部变量和返回值。
示例:
int add(int a, int b) { return a + b; }
返回语句
return
语句用于终止函数的执行,并将控制权交还给调用函数。main()
函数的返回值通常是0
表示正常执行。示例:
return 0;
分隔符
分隔符用于分隔语句和表达式,常见的分隔符包括:
逗号 , :用于分隔变量声明或函数参数。
分号 ; :用于结束语句。
括号:
圆括号
()
用于分组表达式、函数调用。花括号
{}
用于定义代码块。方括号
[]
用于数组下标。
在 C 程序中,分号 ; 是语句结束符,也就是说,每个语句必须以分号结束,它表明一个逻辑实体的结束。
例如,下面是两个不同的语句:
printf("Hello, World! \n");
return 0;
个单独的分号也可以作为一个空语句,表示什么都不做。例如:
;
注释
C 语言有两种注释方式:
// 单行注释
以 // 开始的单行注释,这种注释可以单独占一行。
/* 单行注释 */
/*
多行注释
多行注释
多行注释
*/
/* */ 这种格式的注释可以单行或多行。
// 这是单行注释
/*
这是多行注释
它可以跨越多行
*/
int main() {
// 打印一条消息
printf("Hello, World!\n");
return 0;
}
您不能在注释内嵌套注释,注释也不能出现在字符串或字符值中。
标识符
标识符是程序中变量、函数、数组等的名字。标识符由字母(大写或小写)、数字和下划线组成,但第一个字符必须是字母或下划线,不能是数字。
一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。因此,在 C 中,Manpower 和 manpower 是两个不同的标识符。下面列出几个有效的标识符:
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
常量
常量是固定值,在程序执行期间不会改变。
常量可以是整型常量、浮点型常量、字符常量、枚举常量等。
const int MAX = 100; // 整型常量
const float PI = 3.14; // 浮点型常量
const char NEWLINE = '\n'; // 字符常量
字符串字面量
字符串字面量是由双引号括起来的字符序列。
字符串末尾会自动添加一个空字符 \0。
char greeting[] = "Hello, World!";
运算符(Operators)
运算符用于执行各种操作,如算术运算、逻辑运算、比较运算等。
C 语言中的运算符种类繁多,常见的包括:
算术运算符:
+
,-
,*
,/
,%
关系运算符:
==
,!=
,>
,<
,>=
,<=
逻辑运算符:
&&
,||
,!
位运算符:
&
,|
,^
,~
,<<
,>>
赋值运算符:
=
,+=
,-=
,*=
,/=
,%=
其他运算符:
sizeof
,?:
,&
,*
,->
,.
int a = 5, b = 10;
int sum = a + b; // 使用算术运算符 +
int isEqual = (a == b); // 使用关系运算符 ==
C 中的空格
只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它。
在 C 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:
int age;
在这里,int 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们。另一方面,在下面的语句中:
fruit = apples + oranges; // 获取水果的总数
fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。