c语言容易忽略的点
来源:互联网 发布:网络直播发展的弊端 编辑:程序博客网 时间:2024/05/22 14:01
世间事,除了生死,哪一件不是闲事。 ------仓央嘉措
在Linux环境下,gcc编译器由分析器、优化器、编译器组成。gcc执行分四步:
1)预处理;执行预处理语句,删除注释(预先护理部分语句)gcc -E xx.c xx.i
2)编译;将C语言转化为汇编语言(检查C语言的语法正确性) gcc -s xx.i -o xx.s
3)汇编;将汇编语言转换成目标文件(二进制文件) gcc -c xx.s -o xx.o vim -b xx.o (:%!xxd -g 1) 查看二进制文件
4)链接;确保多个目标文件组成的程序正常运行
1、对于主函数的写法,主要有两种:
第一种:
int main(int argc,char **args)
{
}
这种写法是最初C语言主函数的写法。
第二种:
int main()
{
}
这种是简化了的写法,两种写法都可以,但是有许多学校的教学用的是:
void main()
{
}
这种写法不符合C语言的标准。
2、关于常量变量
实型常量有两种表示形式:
1.小数形式。由数字和小数点组成,必须有小数点。
例:4.23、0.15、.56、78.、0.0
2.指数形式:以幂的形式表示,以字母e或E后跟一个以10为底的幂数。
(1)字母e或E之前必须要有数字。
(2)字母e或E后面的指数必须为整数,字母e或E的前后及数字之间不得有空格。
默认是double,如果数字后面加上<f> <F> 就表示float 型,后缀“l”或“L”表示long double型。
例:2.3e5 500e-2 .5E3 4.5e0 34.2 .5 12.56L 2.5E3L
sizeof(); 运算符 计量单位字节
int 4字节 32位1个符号位,范围:-2**31---2*31-1
float 4字节 小数点后6---7位
double 8字节 小数点15---16位
char 1
不同操作系统可能会不同,可用运算符sizeof()来计量单位字节。
值得注意的是long int与short int,这两种变量类型的大小根据操作系统而定,唯一确定的是long型一定大于等于int型,short型一定小于int型。
在选择数据类型时,在都可以的情况下,尽量选择少的,因为将来如果用户非常多的时候,可能是几个字节的上亿次叠加。
unsigned作修饰符时,格式输出为%u,可以达到节省字符的目的,但使用时要确保不会用到负数。
另外,关于C语言有没有bool类型数据的问题,最初的89年版C语言是没有的,但是C语言隔一段时间就会更新一次,99年版增加里bool类型,但是现在大多数的编译器都还是只支持89年版。
3、关于格式输出
%.2f 保留小数点后两位(四舍五入)
10.2f 10表示整个位数(小数点也算,只有大于数据原宽度情况下才有用)
%10d 同样的,输出的位数占十位
另外,还有输出一些特殊符号:
1)\t 出现的地方相当于出现里tab键;
2)\r 换行;
3)\空格 代表空格;
4)\\ 代表\;
5)\n 代表回车回车;
6)\" 代表";
7)\' 代表';
8)?? 代表?;
9)%% 代表%
4)关于字符
大家都知道计算机存储字符是存储的ASCII码,说白了就是存的数字,不同数字代表不同字符,为了写程序的方便,最好能记住一些常用字符的ASCII码。(所有的单字符都用符号' ',字符串用“ ”)
A--Z 65 -- 90
a--z 97 -- 122
0--9 48 -- 57
5)关于类型转换
出现不同字节大小的变量类型进行运算的时候将会扩充占字节小多大的数据(自动类型转化)。
出现不同类型运算,但是两种类型占空间大小一致,将表示精度小的数据类型,转化为表示精度大的数据类型。
除了自动类型转换,有时需要人为的进行类型转换,称为强制类型转换。
例:(int)float 小数部分直接丢弃,不进行四舍五入
6)关于标准输入函数scanf()
用户在用键盘输入数据时,数据并不是直接到达计算机内存,而是要经过一个缓冲区。这就设计到一个缓冲区残余问题。
举个简单的例子:
#include <stdio.h>
int main()
{
char ch ,get;
scanf('%c',&ch);
get=getchar();
printf("%c %c",ch,get);
return 0;
}
代码的本意是输入两个字符并打印,但是运行时会发现,当你输完第一个字符,回车后,屏幕上就会输出你输入的第一个字符,然后换行。这是因为当输入第一个字符并回车后,字符被写入,但是回车(\n)留在里缓冲区,当遇到getchar时,被吸收了进去,如何没有遇到getchar,这个回车会一直存在于缓冲区,很容易引发程序出错。输入完成后回车,这是无法避免的,如何解决这个问题?首先,可以在每一个scanf()语句后面增加一句getchar();来吸收\n,但是,用户在输入的时候并不一定会按要求输入一个字符,可能是任意多个,这样的话缓冲区会残存许多字符,最常用的做法是在每一个scanf()后面增加一句while(getchar()!='\n');
7)关于运算符
c=b+a++; 相当于c=b+a;a++
a+++b;相当于(a++)+b;
c=a>b?a:b;(唯一的三目运算符)先判断a>bs是否成立,成立c取值于a,不成立取值于b。
运算符的运算方向:除了单目运算符和赋值运算符是从右向左,其余都是从左向右。
,(逗号运算符)取值为右边的值,但是左右的表达式都会运行,优先级最低。
8)关于程序书写
写程序首考虑1、稳定性;2、可读性;3、可维护性;4、性能
Linux系统编译程序时,它会报错误和警告,其中警告是分等级的,有些它认为不重要的警告使用gcc xxx.c 命令不会报,要用gcc xxx.c -Wall来查看,有些警告可能会造成输出结果的不理想。
在写if语句时,我们经常会写if(a==0),当代码非常长的时候,可能会写成if(a=0),此时括号里是赋值语句,为真,所以一定会执行if下的语句,不妨写成if(0==a),这时当写成if(0=a),程序就会报错。
例:for(i=0;i<18;i++) 一般判断的时候不写=,因为像float这种类型是不精确的,使用等号容易错过需要的数。
9)一些函数
程序运行时有时我们需要直接退出---exit(0);自然退出 exit(1);成功退出 exit(-1);失败退出
index = rand()%5; //0--4随机取值
index = rand()%91 + 10; //90--100随机取值
srand((unsigned)time(NULL));//将时间设置为随机数种子,整个程序中只要有一次就好
10)最后
if switch不是函数,不属于任何库
for 适用于循环次数确定的场景
while 适用于循环次数不确定的场景
do while 总次数与while相同
contiune 结束当前一次循环
break 退出循环
QQ:1786610699 倔强的木木 2017年7月15日
阅读全文
1 0
- c语言容易忽略的点
- C语言中容易忽略的问题
- 关于c语言中容易忽略的问题
- Objective-C 语言容易忽略的基础碎片(一)
- C语言---那些容易被忽略的细节
- [c++]容易忽略的问题
- C语言中易忽略的几点
- C中容易忽略的知识点
- 关于C编程容易忽略的地方
- 容易忽略的C编写规则!
- C语言中容易被忽略的细节(第一篇)
- C语言中容易被忽略的细节(第二篇)
- C语言中容易被忽略的细节(第三篇)
- C语言中容易被忽略的细节(第四篇)
- 快速排序C语言实现,代码中那些容易忽略的细节
- 在初学C语言容易忽略的函数-scanf()函数与printf()函数
- C语言易忽略点总结
- PHP程序员容易忽略的几点精华
- Ubuntu添加环境变量
- Java面试题全集(下)
- vi命令
- 剑指offer面试题-合并两个有序链表
- android设备导出word
- c语言容易忽略的点
- 普通话(如何区分前鼻音与后鼻音)
- ubuntu 与 windows 共享文件
- tomcat的使用和注意
- 提问的力量四:提问的艺术-体验学习中提问的技巧
- Android WebView 详解
- JavaScript绕过简单原理(1)
- 关于String类问题
- Angular变化检测机制:改善的脏检查