vim:编辑器
gcc:编译器
gcc:编译器
1.main --> hello world!
格式:functype funcname(lists)
{
body
}
2.基本属性
type: 决定变量空间大小
sizeof() 后面可以跟变量名或变量类型
格式:functype funcname(lists)
{
body
}
2.基本属性
type: 决定变量空间大小
sizeof() 后面可以跟变量名或变量类型
sizeof(char) = 1
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 4
sizeof(float) = 4
sizeof(double) = 8
sizeof(long double) = 12 【单位:字节】
决定可执行的操作
算术运算符:+ - * / % ++ -- 【浮点数不可以求模】
关系运算符:> >= == <= < != 【成立结果为1,不成立结果为0】
逻辑运算符: 逻辑与 && 【如果有一个条件为逻辑假,则整个表达式为假】
逻辑或 || 【如果有一个条件为逻辑真,则整个表达式为真】
逻辑非 !
逻辑真 非零
逻辑假 0 【结果非真(1)即假(0)】
位运算符:>> << ~ ^ & |
【计算机识别的据都是二进制数字,存储的是正数,则以源码存储;存储的是负数,则以补码存储】
【补码:对负数取绝对值,得到源码,再取反加1】
【取反不考虑符号位】
位与: 位或: 位非: 异或:
1 & 1 = 1 1 | 1 = 1 1 ~= 0 1 ^ 1 = 0
1 & 0 = 0 1 | 0 = 1 0 ~= 1 1 ^ 0 = 1
0 & 1 = 0 0 | 1 = 1 0 ^ 1 = 1
0 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0
位移:【逻辑位移:不考虑符号位】
【算术位移:考虑符号位】
【最高符号位:0表示正数;1表示负数】
【算术右移:低位丢掉,高位补符号位】
【逻辑左移:高位丢掉,低位补0】
条件运算符:【三目录运算符】
【格式:con ? true :flase】
赋值运算符:= += -= *= /= %= |= &= ^= >>= <<=
:,
varname:决定变量地址
value:变量的内容
3.函数
一个源文件(.c)生成可执行二进制文件(a.out)
四个步骤:
第一步:预处理 .i
作用:处理伪代码和特殊字符,然后把代码展开放入源文件中
-->伪代码:#开头的代码统称伪代码(头文件、宏命令、条件编译)
-->头文件:#include <...>
-->宏定义:#define <...>
-->条件编译:#if ... #endif
-->特殊字符: _LINE_ _FILE_ _DATE_ _TIME_
gcc -E name.c -o name.i
第二步:编译 .s
作用:检查语法和词法规则,生成汇编代码
gcc -S name.c -o name.s
第三步:汇编 .o
作用:把汇编代码生成二进制代码或者目标代码
gcc -c name.c -o name.s
第四步:链接
作用:使二进制代码形成一个有机整体
需要链接动态库或者静态库
ldd ./a.out
gcc name.o -o name
输入输出语句:
输出语句:printf
【格式:int printf(const char *format, . . .);】
【返回类型:int】
【参数:至少要有一个参数】
【注意:是一个行缓冲函数】
fflush(stdout);表示输出缓冲区
fflush(stdin); 表示刷新输入缓冲区
fflush(NULL);表示刷新所有缓冲区
fprintf
【格式:int fprintf(FILE *stream, const char *format, ...);】
sprintf
【格式:int sprintf(char *str, const char *format, ...);】
snprintf
【格式:int snprintf(char *str, size_t size, const char *format, ...);】
标准输入:stdin
标准输出:stdout
错误输出:stderr
指定数据位宽:m.n:
【m表示整个数据位宽】
【n表示小数部分位宽】
【+表示右对齐,可以省略】
【-表示左对齐】
输入语句:scanf
【格式:int scanf(const char *format, ...);】
fscanf
【格式:int fscanf(FILE *stream, const char *format, ...);】
sscanf
【格式:int sscanf(const char *str, const char *format, ...);】
【注意:main 函数返回值范围(0~255)】
注释:
【行注释://?】
【模块注释:/* */】
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 4
sizeof(float) = 4
sizeof(double) = 8
sizeof(long double) = 12 【单位:字节】
决定可执行的操作
算术运算符:+ - * / % ++ -- 【浮点数不可以求模】
关系运算符:> >= == <= < != 【成立结果为1,不成立结果为0】
逻辑运算符: 逻辑与 && 【如果有一个条件为逻辑假,则整个表达式为假】
逻辑或 || 【如果有一个条件为逻辑真,则整个表达式为真】
逻辑非 !
逻辑真 非零
逻辑假 0 【结果非真(1)即假(0)】
位运算符:>> << ~ ^ & |
【计算机识别的据都是二进制数字,存储的是正数,则以源码存储;存储的是负数,则以补码存储】
【补码:对负数取绝对值,得到源码,再取反加1】
【取反不考虑符号位】
位与: 位或: 位非: 异或:
1 & 1 = 1 1 | 1 = 1 1 ~= 0 1 ^ 1 = 0
1 & 0 = 0 1 | 0 = 1 0 ~= 1 1 ^ 0 = 1
0 & 1 = 0 0 | 1 = 1 0 ^ 1 = 1
0 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0
位移:【逻辑位移:不考虑符号位】
【算术位移:考虑符号位】
【最高符号位:0表示正数;1表示负数】
【算术右移:低位丢掉,高位补符号位】
【逻辑左移:高位丢掉,低位补0】
条件运算符:【三目录运算符】
【格式:con ? true :flase】
赋值运算符:= += -= *= /= %= |= &= ^= >>= <<=
:,
varname:决定变量地址
value:变量的内容
3.函数
一个源文件(.c)生成可执行二进制文件(a.out)
四个步骤:
第一步:预处理 .i
作用:处理伪代码和特殊字符,然后把代码展开放入源文件中
-->伪代码:#开头的代码统称伪代码(头文件、宏命令、条件编译)
-->头文件:#include <...>
-->宏定义:#define <...>
-->条件编译:#if ... #endif
-->特殊字符: _LINE_ _FILE_ _DATE_ _TIME_
gcc -E name.c -o name.i
第二步:编译 .s
作用:检查语法和词法规则,生成汇编代码
gcc -S name.c -o name.s
第三步:汇编 .o
作用:把汇编代码生成二进制代码或者目标代码
gcc -c name.c -o name.s
第四步:链接
作用:使二进制代码形成一个有机整体
需要链接动态库或者静态库
ldd ./a.out
gcc name.o -o name
输入输出语句:
输出语句:printf
【格式:int printf(const char *format, . . .);】
【返回类型:int】
【参数:至少要有一个参数】
【注意:是一个行缓冲函数】
fflush(stdout);表示输出缓冲区
fflush(stdin); 表示刷新输入缓冲区
fflush(NULL);表示刷新所有缓冲区
fprintf
【格式:int fprintf(FILE *stream, const char *format, ...);】
sprintf
【格式:int sprintf(char *str, const char *format, ...);】
snprintf
【格式:int snprintf(char *str, size_t size, const char *format, ...);】
标准输入:stdin
标准输出:stdout
错误输出:stderr
指定数据位宽:m.n:
【m表示整个数据位宽】
【n表示小数部分位宽】
【+表示右对齐,可以省略】
【-表示左对齐】
输入语句:scanf
【格式:int scanf(const char *format, ...);】
fscanf
【格式:int fscanf(FILE *stream, const char *format, ...);】
sscanf
【格式:int sscanf(const char *str, const char *format, ...);】
【注意:main 函数返回值范围(0~255)】
注释:
【行注释://?】
【模块注释:/* */】