第一夜:编译器、语法关键字、运算符、变量及数据类型

吃完饭,洗过碗,开始第一天的活动。

今天的复习内容最轻松,因为是基础中的基础。主要涉及C语言的编译器、语法关键字、运算符、变量及数据类型。

编译器

C语言在Linux上的编译器:GCC

编译tips:使用GCC在64位电脑上编译32位程序

1
2
3
4
5
6
gcc -m32 -o test test.c

#先要安装build-essential module-assistant gcc-multilib g++-multilib

apt-get install build-essential module-assistant gcc-multilib g++-multilib

C语言在Windows上的编译器:CL.EXE
Windows上的集成开发环境,通常是Visual Studio,目前最新的已经是VS 2019版本了,与早些年不同的是,VS Community版本目前对个人是免费的。
但是因为一直以来的习惯,我还是习惯用VC6.0作为我的Windows C语言开发环境。编译连接仍然采用CL.EXE和LINK.EXE,以及NMAKE.EXE。

基本的编译语法

以Hello World为例,代码如下:

1
2
3
4
5
6

int main(){
printf("Hello World\n");
return 0;
}

Linux(Debian)下的编译过程
gcc -o helloworld helloworld.c

Windows下使用CL.EXE进行编译

1
2
cl.exe /c helloworld.c
link helloworld.obj /LIBPATH:C:\Tools\Binary\VC++6.0\VC98\Lib\

这里C:\Tools\Binary\VC++6.0\VC98\Lib\是我的VC6路径,并且执行cl和link需要将程序路径加入到环境变量。

语法关键字

1
2
3
4
5
6
7
auto  break case  char  const  
continue default do double else
enum extern float for goto
if int long register return
short signed sizeof static struct
switch typedef unsigned union void
volatile while

部分关键字含义

  • continue 结束当前循环,开始下一轮循环
  • extern 声明变量或函数是在其它文件或本文件的其他位置定义
  • goto 无条件跳转语句
  • register 声明寄存器变量
  • typedef 用以给数据类型取别名
  • volatile 说明变量在程序执行中可被隐含地改变

运算符

基本运算符

加减乘除、取模、自增、自减: +,-,*,/,%,++,–

赋值运算符

1
2
3
4
5
6
7
8
9
10
11
12
=:简单的赋值运算符,把右边操作数的值赋给左边操作数    C = A + B 将把 A + B 的值赋给 C
+=:加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A
-=:减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A
*=:乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A
/=:除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A
%=:求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A
<<=:左移且赋值运算符 C <<= 2 等同于 C = C << 2
>>=:右移且赋值运算符 C >>= 2 等同于 C = C >> 2
&=:按位与且赋值运算符 C &= 2 等同于 C = C & 2
^=:按位异或且赋值运算符 C ^= 2 等同于 C = C ^ 2
|=:按位或且赋值运算符 C |= 2 等同于 C = C | 2

逻辑运算符

1
与或非:&&,||,!

位运算符

1
与、或、异或、取反、左移、右移:&,|,^,~,<<,>>

杂项运算符

1
2
3
&    返回变量的地址
* 指向一个变量
? : 条件表达式三元运算符

变量及数据类型

基本类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
整数类型:
char 1 字节 -128 到 127 或 0 到 255
unsigned char 1 字节 0 到 255
signed char 1 字节 -128 到 127
int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int 2 或 4 字节 0 到 65,535 或 0 到 4,294,967,295
short 2 字节 -32,768 到 32,767
unsigned short 2 字节 0 到 65,535
long 4 字节 -2,147,483,648 到 2,147,483,647
unsigned long 4 字节 0 到 4,294,967,295

浮点类型:
float 4 字节 1.2E-38 到 3.4E+38 6 位小数
double 8 字节 2.3E-308 到 1.7E+308 15 位小数
long double 16 字节 3.4E-4932 到 1.1E+4932 19 位小数

枚举类型

可以在定义枚举类型时改变枚举元素的值:

enum season {spring, summer=3, autumn, winter};

没有指定值的枚举元素,其值为前一元素加1。此例中spring的值为0,summer的值为 3,autumn 的值为4,winter 的值为5。

三种写法

  1. 先定义枚举类型,再定义枚举变量
1
2
3
4
5
6
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

  1. 定义枚举类型的同时定义枚举变量
1
2
3
4
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
  1. 省略枚举名称,直接定义枚举变量
1
2
3
4
enum
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

引用枚举类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN
};

int main() {
enum DAY day;
day = WED;
printf("%d",day);
return 0;
}

第二夜:函数、作用域、预处理和头文件 C语言的30个夜晚
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×