回顾
还记得上篇最后的笔记吗?还记得那个简单的hello world吗?回顾一下吧。
首先,这个程序要有一个入口,能被系统调用,这个入口我们叫main,然后他是个函数,函数的格式是要有返回值和参数,最重要函数的内容要包含在一堆大括号中,而函数中的每句话必须要用英文的分号结尾,像这一样。
int main()
{
return 0;
}
然后我们这个程序实际什么也没有干,我们希望他做点什么,比如可以输出一句话,我们用到了printf(“hello world”);
int main()
{
printf("hello world");
return 0;
}
到这里,我们的程序还是不能运行,因为printf,我们没有写过,他怎么打印文字呢,原来他是系统实现了的,于是我们要告诉我们的程序要去系统里面找这样一个函数,我们通过#include<stdio.h>,来导入系统的标准输入输出,#include叫做预编译符,他在在程序编译之前帮我们找到print函数,而stdio.h是包含我们要找的函数的文件。这样,我们的程序就完成了。
#include<stdio.h>
int main()
{
printf("hello world");
return 0;
}
基本语法
其实在写第一个程序的时候,我们就讲了一些语法了,毕竟一个程序是不可能离开语法的。
关键字
程序中有些预留的词,是绝对不能用的,称为关键字,是c语言语法的关键,这些词不需要你包含任何文件就能使用。每一个关键字,都相当于一个暗语,告诉计算机要怎样工作。
关键字表:
关键字 | 说明 | 标注 |
---|---|---|
auto | 声明自动变量 | |
break | 跳出当前循环 | |
case | 开关语句分支 | |
char | 声明字符型变量或函数返回值类型 | |
const | 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变 | |
continue | 结束当前循环,开始下一轮循环 | |
default | 开关语句中的"其它"分支 | |
do | 循环语句的循环体 | |
double | 声明双精度浮点型变量或函数返回值类型 | |
else | 条件语句否定分支(与 if 连用) | |
enum | 声明枚举类型 | |
extern | 声明变量或函数是在其它文件或本文件的其他位置定义 | |
float | 声明浮点型变量或函数返回值类型 | |
for | 一种循环语句 | |
goto | 无条件跳转语句 | |
if | 条件语句 | |
int | 声明整型变量或函数 | |
long | 声明长整型变量或函数返回值类型 | |
register | 声明寄存器变量 | |
return | 子程序返回语句(可以带参数,也可不带参数) | |
short | 声明短整型变量或函数 | |
signed | 声明有符号类型变量或函数 | |
sizeof | 计算数据类型或变量长度(即所占字节数) | |
static | 声明静态变量 | |
struct | 声明结构体类型 | |
switch | 用于开关语句 | |
typedef | 用以给数据类型取别名 | |
unsigned | 声明无符号类型变量或函数 | |
union | 声明共用体类型 | |
void | 声明函数无返回值或无参数,声明无类型指针 | |
volatile | 说明变量在程序执行中可被隐含地改变 | |
while | 循环语句的循环条件 |
预编译指令#
#include就是一个预编译指令,所有的预编译指令都以#开头,和关键字一样,也是系统定义的一些指令,后面会慢慢接触一些,暂时不需要做过多了解,后面详细讲。下面是一个常用的指令,由于指令比较多,用到时具体讲。
指令 | 描述 |
---|---|
#define | 定义宏 |
#include | 包含一个源代码文件 |
#undef | 取消已定义的宏 |
#ifdef | 如果宏已经定义,则返回真 |
#ifndef | 如果宏没有定义,则返回真 |
#if | 如果给定条件为真,则编译下面代码 |
#else | #if 的替代方案 |
#elif | 如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码 |
#endif | 结束一个 #if……#else 条件编译块 |
#error | 当遇到标准错误时,输出错误消息 |
#pragma | 使用标准化方法,向编译器发布特殊的命令到编译器中 |
标识符
关键字和预处理的命令,也就是系统用来标识功能的符号,我们在自己的程序中也需要很多标识符来给自己变量,函数等命名,比如main,printf,都是标识符,那么我们在程序内部的标识符除了不能是关键字和预编译指令这些,还要满足一个基本规定。
- 一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始
- 后跟零个或多个字母、下划线和数字(0-9)。
- C 标识符内不允许出现标点字符,比如 @、$ 和 %。
- C 是区分大小写的编程语言。
分号
第一条,其实这条你以后基本不太可能忘记,每一句话结尾一定要加分号,你是不是发现有些时候一行结束的时候没有分号,是的,这里说的一句话不是一行的意思。
虽然说用的时间多了就知道什么时候需要加什么时候不需要加。但是这里还是做些简单的说明。
- #开头的预编译命令后面不需要加
- 一个可以执行的单元后面加
最后,真不知道需不需要加,可以加了看看有没有bug,或者学习嘛,跟着比人写就是了。233333
括号
在c语言,也可以说在所有其他语言中,基本上括号都必须是成对出现的。
小括号()
小括号一般是用来放参数的,没有参数也必须写括号。
中括号[]
在后面的学习或出现,是数组的代表。
大括号{}
大括号是c程序的最小代码块单元。在任何时候,都可以使用大括号,来把代码和前后做个简单的分块,不光是为了好看,这个大括号会在程序中新建一个叫栈的东西,然后里面会有只有自己可见的局部变量。
另外一个非功能性的用法,就是用大括号做排版,一般c语言都是上面代码的风格,大括号在代码块的下一行单独起一行而且只有大括号,然后换行,下一行代码要在之前的代码的缩进下多缩进4个空格,一般设置table为4个空格,就可以只需要按一下table皆可以了。然后后面的大括号也是单独占一行,缩进也退回来,这样的代码就显得很整洁。
注释
代码中的文字不一定所以的都是有用的,有时候我们需要在代码中加一些个人的记录,单存描述一下这个地方写的什么意思,这个时候注释就能派上用场了。比如我们第一次写了hello world,很开心,那么我们可以给这个地方加个注释。
#include<stdio.h>
int main()
{
//真开心,这句打印是我自己写的
printf("hello world");
return 0;
}
或者
#include<stdio.h>
int main()
{
/*真开心,这句打印是我自己写的
某年某月某日*/
printf("hello world");
return 0;
}
c语言中注释有两种形式,
1.单行注释 //
2.多行注释 /*被注释的内容*/
这里单行和多行并不是绝对的,你可以将多行都是要//,也就是每行加一个双斜杠实现
同样的对于单行注释,你也可以用多行的注释符号
这里推荐奖注释写在被注释的代码的上面一行
Note
本篇主要讲了一些程序的基本语法和组成,大多只需要了解就可以了,没有特别需要记忆的地方。不要花功夫死记硬背这些,因为用的久了,大部分都自然会记住,而比较难的,现在讲太多也没有必要,不如等以后一个个详细讲。
- 试试看自己能不能不参考别人的,自己把代码写出来
- 试着整理自己的代码,让代码整洁
- 试试设置自己的编辑器用table键来控制四个缩进
4.试试注释代码
附录
vs的快捷键
操作 | 功能 |
---|---|
F7 | 编译 |
vs的设置
设置vs使用table表示四个空格。
Tools -> Options -> Text Editor -> [C/C++] -> Tabs
这个页面两个选择,选成和我一样就好了。
第一个参数
none:换行的时候没有缩进
block:缩进到和{}也就是当前块一样
smart:比block再多缩进一个
第二个参数:两个值分别为插入空格和保留tab,也就是按table的时候,文件里面记录的到底是四个空格,还是一个table,后面我们会介绍字符的编码的时候,会发现这其实是不一样的。