C语言基本语法
Hello World 示例
C 语言的源码文件,通常以后缀名.c
结尾。
#include <stdio.h>
int main(void) {
printf("Hello World
");
return 0;
}
使用gcc
编译器,将源文件hello.c
编译成二进制代码。
默认会在当前目录下生成一个编译产物文件a.out
(assembler output 的缩写,Windows 平台为a.exe
)
$ gcc hello.c
gcc
的-o
参数(output 的缩写)可以指定编译产物的文件名。
# -o hello 指定,编译产物的文件名为 hello(取代默认的 a.out)。
$ gcc -o hello hello.c
gcc
的-std=
参数(standard 的缩写)可以指定按照哪个 C 语言的标准进行编译。
$ gcc -std=c99 hello.c
基本语法
语句
C 语言的代码由一行行语句(statement)组成。
C 语言规定,语句必须使用分号结尾,除非明确规定可以不写分号。
int x = 1; // 变量声明语句,声明整数变量 x,并且将值设为 1。
; // 空语句
表达式
表达式(expression)是一个计算式,用来获取值。
1 + 2
语句块
多个语句使用一对大括号{}
,组成一个块,也称为复合语句(compounded statement)。
{
int x;
x = 1;
}
注释
注释是对代码的说明,编译时,注释会被替换成一个 空格。
- 单行注释
将注释放在双斜杠//
后面,从双斜杠到行尾都属于注释。
int x = 1; // 这是注释
- 多行注释
将注释放在/*...*/
之间,内部可以分行。
int open(char* s /* file name */, int mode);
标准库、头文件
- 标准库
C 语言自带的功能,统称为“标准库”(standard library)。
举例来说,printf()
函数就是 C 语言自带的,只要去调用它,就能实现在屏幕上输出内容。
- 头文件
不同的功能定义在不同的文件里面,这些文件统称为“头文件”(header file)。
头文件的后缀通常是.h
,比如printf()
的头文件就是系统自带的stdio.h
。
如果要使用某个功能,就必须先加载对应的头文件,加载使用的是#include
命令
#include <stdio.h>
printf 函数
基本用法
printf()
的作用是将参数文本输出到屏幕。f代表 format
(格式化),表示可以定制输出文本的格式。
printf("Hello World");
printf()
不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。
为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符
。
printf("Hello World
");
占位符
printf()
可以在输出文本中指定占位符。所谓“占位符”,就是这个位置可以用其他值代入。
printf("There are %i apples
", 3); // 输出 There are 3 apples
There are %i apples
是输出文本,里面的
%i
就是占位符,表示这个位置要用其他值来替换。
占位符的第一个字符一律为百分号%
,第二个字符表示占位符的类型,%i
表示这里代入的值必须是一个整数。
printf()
的第二个参数就是替换占位符的值,上面的例子是整数3
替换%i
。
输出文本里面可以使用多个占位符,printf()
参数与占位符是一一对应关系。
常用占位符:
%a
:浮点数。%A
:浮点数。%c
:字符。%d
:十进制整数。%e
:使用科学计数法的浮点数,指数部分的e
为小写。%E
:使用科学计数法的浮点数,指数部分的E
为大写。%i
:整数,基本等同于%d
。%f
:小数(包含float
类型和double
类型)。%g
:6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e
为小写。%G
:等同于%g
,唯一的区别是指数部分的E
为大写。%hd
:十进制 short int 类型。%ho
:八进制 short int 类型。%hx
:十六进制 short int 类型。%hu
:unsigned short int 类型。%ld
:十进制 long int 类型。%lo
:八进制 long int 类型。%lx
:十六进制 long int 类型。%lu
:unsigned long int 类型。%lld
:十进制 long long int 类型。%llo
:八进制 long long int 类型。%llx
:十六进制 long long int 类型。%llu
:unsigned long long int 类型。%Le
:科学计数法表示的 long double 类型浮点数。%Lf
:long double 类型浮点数。%n
:已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。%o
:八进制整数。%p
:指针。%s
:字符串。%u
:无符号整数(unsigned int)。%x
:十六进制整数。%zd
:size_t
类型。%%
:输出一个百分号。
输出格式
printf()
可以定制占位符的输出格式。
- 限定输出宽度
printf()
允许限定占位符的最小宽度。
printf("%5d
", 123); // 输出 " 123"
printf("%12f
", 123.45);// 输出 " 123.450000"
%5d
表示这个占位符的宽度至少为5位,如果不满5位,对应的值的前面会添加空格。
输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,可以在占位符的%
的后面插入一个-
号。
printf("%-5d
", 123); // 输出 "123 "
- 限定小数位数
举例来说,希望小数点后面2只保留两位,占位符可以写成%.2f
。
printf("Number is %.2f
", 0.5); // 输出 Number is 0.50
这种写法可以与限定宽度占位符,结合使用。
printf("%6.2f
", 0.5); // 输出为 " 0.50"
宽度和小数位数这两个限定值,都可以用*
代替,通过printf()
的参数传入。
printf("%*.*f
", 6, 2, 0.5); // 输出为 " 0.50"
- 输出部分字符串
%s
占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用%.[m]s
指定输出的长度。
printf("%.5s
", "hello world"); // 输出 hello
参考: C 语言教程