C - 基本语法
在 C 语言编程 中,"语法"是指程序员编写特定应用程序源代码时所遵循的一套规则。虽然 C 语言中每个关键字都有特定的推荐语法,但在开发 C 语言程序时仍需遵循一些通用规则。
一个典型的 C 语言程序源代码包含以下元素 -
/*Hello World 程序*/ // 注释 #include <stdio.h> // 头文件 int a=10; // 全局声明 // main 函数 int main() { char message[] = "Hello World"; // 局部变量 printf("%s", message); return 0; }
C 语言中的标记
C 程序由各种标记组成。标记可以是关键字、标识符、常量、字符串字面量或符号。例如,以下 C 语句由五个标记组成 -
printf("Hello, World! ");
各个标记如下 -
printf ( "Hello, World! " );
C 编译器会识别标记是否为关键字、标识符、注释、文字、运算符或任何其他可识别的特殊符号。此操作由标记生成器在编译过程的第一阶段完成。
C 语言中的标识符
C 标识符是用于标识变量、函数或任何其他用户定义项的名称。标识符以字母 A 到 Z、a 到 z 或下划线"_"开头,后跟零个或多个字母、下划线和数字(0 到 9)。
C 语言规定了变量、函数或其他编程元素名称的命名规则。它们不是关键字。标识符必须以字母或下划线开头,并且除了字母、数字和下划线之外不能包含任何其他字符。
C 语言不允许在标识符中使用 @、$ 和 % 等标点符号。C 语言是区分大小写的编程语言。因此,在 C 语言中,Manpower 和 manpower 是两个不同的标识符。以下是一些可接受标识符的示例 -
mohd zara abc move_name a_123 myname50 _temp j a23b9 retVal
C 语言中的关键字
C 语言中最重要的部分是关键字。关键字是保留字,它们具有预定义的含义和规定的语法。在 ANSI C 语言中,所有关键字均采用小写字母。程序员需要选择正确的关键字来构建手头问题的解决方案。学习编程的本质就是学会正确使用关键字。
以下列表列出了 C 语言中的保留字。这些保留字不能用作常量、变量或任何其他标识符名称。
auto | else | long | switch |
break | enum | register | typedef |
case | extern | return | union |
char | float | short | unsigned |
const | for | signed | void |
continue | goto | sizeof | volatile |
default | if | static | while |
do | int | struct | _Packed |
double |
除了本章讲解的基本语法外,C 语言中的每个关键字都有其明确定义的语法。每个关键字的用法将在后续章节中讲解。
C 语言中的分号
在 C 语言程序中,分号是语句终止符。也就是说,每个单独的语句都必须以分号结尾。分号表示一个逻辑实体的结束。
以下给出了两个不同的语句 -
printf("Hello, World! "); return 0;
由于分号";"只是 C 语言语句的分隔符,因此 C 语言程序中一个物理行中可能有多个语句。同样,在源代码中,单个语句可能跨越多行。
以下代码在 C 语言中完全有效。一行代码中包含多个语句 -
int a=10; if (a>=50) printf("pass"); else printf("fail");
即使语句跨越多行,以下代码仍然有效 -
if (a>=50) printf("pass"); else printf("fail");
C 语言中的注释
注释就像 C 程序中的帮助文本,会被编译器忽略。它们以 /* 开头,以字符 */ 结尾,如下所示 -
/* 我的第一个 C 语言程序 */
注释中不能包含注释,注释也不能出现在字符串或字符字面量中。
源代码
C 程序是一个文本文件,包含一系列语句。该文件必须以 .c 作为扩展名。C 编译器在编译过程中仅识别 .c 文件。 C 语言的关键字和其他标识符仅使用英文字母,但字符串字面值可以包含任何 Unicode 字符。
main() 函数
每个 C 程序必须有一个(且只有一个)main() 函数,编译器从该函数开始执行代码。但是,main() 函数不必位于 .c 文件代码的开头。C 程序中可以有任意数量的函数。如果一个函数在其定义之前调用了任何其他函数,则应该对其进行前向声明。
头文件
除了关键字之外,C 程序通常还需要调用头文件库中的预定义函数。所需的头文件可以通过 #include 预处理器指令 导入。所有 #include 语句都必须位于源代码的开头。
变量声明
C 是一种静态类型语言。它要求程序中出现的所有变量在使用前必须声明。变量可以全局声明,即在任何函数之外,也可以在函数的作用域内局部声明。变量只能存储其声明类型的值。这是 C 语言的重要规则之一。
C 程序中的语句
语句是程序的基本构建块。main() 函数中的语句默认按从上到下的顺序执行。该顺序由条件语句或循环结构控制。作为一项基本语法规则,每个语句末尾都必须有分号 (;)。
C 程序中的空格
在编译源代码时,编译器会忽略空格。空格是 C 语言中用来描述空格、制表符、换行符和注释的术语。虽然使用空格可以提高代码的可读性,但它们对编译器来说意义不大(除非它们是字符串字面量的一部分,出现在双引号内)。仅包含空格(可能带有注释)的行称为空行,C 编译器会完全忽略它。
空格将语句的各个部分分隔开,并使编译器能够识别语句中一个元素(例如 int)的结束位置和下一个元素的开始位置。因此,在以下语句中 -
int age;
int 和 age 之间必须至少有一个空格(通常为空格),以便编译器能够区分它们。另一方面,在以下语句中 -
fruit = apples + oranges; // 获取水果总数
"fruit"和"="之间以及"="和"apples"之间不需要空格,但如果您想提高可读性,可以随意添加一些空格。
C 语言中的复合语句
通常,您需要将一个内聚的语句块定义为一个编程逻辑单元。例如,您可能希望在某个逻辑表达式为真时执行多个语句,或者在循环块中执行多个语句。类似地,用户定义函数可能包含多个语句。在这种情况下,语句会被组合在一起形成复合语句。C 语言使用花括号进行这种组合。
{ Statement1; Statement2; . . . . . . }
在下面的代码中,if 和 else 部分各有一个语句块。
int marks = 40; if (marks<50) { printf("Result: Fail "); printf ("Better Luck next time"); } else { printf("Result: Pass "); printf("Congratulations"); }
函数定义中也使用花括号:
float area_of_square(float side) { float area = pow(side,2); return area; }
使用 struct、union 或 enum 定义自定义类型也需要使用花括号将多个语句组合在一起。
struct student { char name[20]; int marks, age; };
花括号也声明了一个数组,如下所示 -
int marks[ ]={50,56,76,67,43};