处理警报
编译器:Microsoft Visual Studio 2010
任务是编译简单的代码,要求计算键入的两个整数的和,代码如下:
一段十分简单的代码,但是在屏蔽了#define _CRT_SECURE_NO_WARNINGS这一句代码之后再使用scanf函数就会有这样的warning:
警报原因:输入的函数是不安全的。例如在通常使用“scanf”时,我们并没有对将要放入的数据所占用的空间进行检测(可能出现数据越界),因此这样是不够安全的。
解决这个问题的方法有两个:1.将scanf函数换成scanf_s函数;2.在源代码开头加上这行代码:#define _CRT_SECURE_NO_WARNINGS
解析:scanf是C语言提供的,scanf_s并不是标准C语言提供的,是VS编译器提供的。若使用scanf_s会影响代码的可移植性,推荐使用第二种方法。
后续可能还会用到其他函数例如strcpy,strlen,strcat等,也会出现这个警报,解决办法是一样的。(C语言提供的函数可能有一些是不安全的,需要程序员自己去规避这些坑,但是使用编译器提供的安全函数会降低代码的可移植性)
变量的分类
局部变量
放在一个代码块{}内部的变量,作用域是该代码块。只能在此代码块内生效,局部变量的生命周期是该代码块从执行开始到结束。当局部变量和全局变量同名的时候,局部变量优先使用。并不是所有的局部变量都放在main函数中,但是放在main函数中的变量都是局部变量。
全局变量
放在{}外的变量称为全局变量,作用域是整个工程。全局变量的生命周期是整个程序的生命周期。
常量
C语言中的常量分为以下几种:
- 字面常量:即直接写出的常量/值
- const修饰的常变量:在定义变量时在前面键入const,会使该变量变为常变量,不可对该变量进行二次赋值。const意为常属性。注意被const修饰的变量本质上仍然是变量,它只是具有了常属性而不能改变。
- #define定义的标识符常量:#define定义常量往往在源文件的最开始,main函数之外,属于全局常量。
- 枚举常量:枚举即一一列举,例如性别,三原色等。枚举关键字enum。枚举关键字定义的枚举常量不可以更改,但是通过枚举类型所创建的变量可以更改。
字符串+转义字符+注释
字符串
字符串类型,由双引号引起来的一串字符。注:字符串结束的标志时一个\0的转移字符。在计算字符串长度的时候\0时结束标志,不算做字符串内容。数据在计算机上存储的时候存储的是二进制,字符存储时遵循ASCII表。A~Z对应的十进制65~90,a~z对应的十进制97~122.