《C语言解惑》—— 1.5 别把分号放错地方

简介:

本节书摘来自华章出版社《C语言解惑》一 书中的第1章,第1.5节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 别把分号放错地方

分号“;”并不总是出现在语句的尾部。如下的写法

#include <stdio.h>;

虽然可以通过编译并能正确运行,但会出现如下警告信息:

warning C4067: unexpected tokens following preprocessor directive - expected a newline

C语言标准规定一行可以有多条语句,例如:

int a; double d; char c;

但输入输出不是C语言的一部分,而是以标准函数形式提供。在每个引用库函数的源程序文件的开头处必须含有如下一行。

#include <stdio.h> 

文件stdio.h定义了 I/O 库所用的某些宏和变量,使用#include 语句把它包含进来, 一起编译。虽然有的 C 编译器使用scanf和printf函数不需要包含它,但建议养成使用这条语句的习惯。其实,一条预编译语句是以换行作为结束的,也就是说,一行只能书写一条预编译语句,如果书写两条,也会给出如上警告。
包含语句属于预编译语句,“;”号作为语句结束符用在一条程序语句之后,而包含语句不是程序语句,它不是以“;”号作为结束符。这里多出一个符号,编译系统认为你应该从“;”号处换行,以便保证预编译语句正确,所以给出警告信息。这与语句漏掉“;”号不同,如果语句尾部漏掉“;”号,就不是给出警告信息,而是给出出错信息。例如:

printf("输入x:")
scanf("%Lf",&x);  

会给出如下出错信息:

error C2146: syntax error : missing ';' before identifier 'scanf'

这条信息明确指出在scanf语句之前漏掉分号,也就是printf少了语句结束符“;”。
如果程序中多用了“;”号,则“;”号构成跳空语句,即
printf("输入x:");;
相当于
printf("输入x:");
;
两条语句,第2行的“;”语句什么也不做。
由此可知,包含头文件的语句没有“;”号,其他语句必须以“;”结束。当然,主函数不是语句,它的“)”号之后更不能有分号。
关于函数和判别语句,暂不讨论。对于入门,目前掌握这些就足够了。

相关文章
|
3天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
6 0
|
14天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
23 0
|
14天前
|
编译器 C语言 C++
【C语言】memcpy()函数(内存块拷贝函数)
【C语言】memcpy()函数(内存块拷贝函数)
36 0
|
15天前
|
C语言 C++
【C语言】rand()函数(如何生成指定范围随机数)
【C语言】rand()函数(如何生成指定范围随机数)
15 0
|
23天前
|
C语言
在C语言中数组作为函数参数的应用与示例
在C语言中数组作为函数参数的应用与示例
13 0
|
23天前
|
算法 C语言
在C语言中函数的递归调用及应用示例
在C语言中函数的递归调用及应用示例
15 1
|
23天前
|
C语言
在C语言中多维数组名作为函数参数的应用与示例
在C语言中多维数组名作为函数参数的应用与示例
12 0
|
23天前
|
安全 程序员 C语言
探索C语言库函数:字符串拷贝函数strcpy
探索C语言库函数:字符串拷贝函数strcpy
19 0
|
3天前
|
程序员 C语言 开发者
C语言库函数 — 字符串函数(含模拟实现字符串函数)
C语言库函数 — 字符串函数(含模拟实现字符串函数)
30 0
|
9天前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现