自己对C不太了解,导致写程序的时候遇到很多问题,对于熟悉C的人来说,这可能不值一提。但是为了自己能有能够更好地理解,还是做下笔记。
一、关于DEVc++使用技巧
头文件引入:
#include <iostream>
#include是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件。
作为iostream(.h)库的一部分,头文件<iostream(.h)>声明了一些用来在标准输入输出设备上进行输入输出操作的对象。using namespace std;
在旧的标准C++中,使用#include<iostream.h>,但在新标准中,用#include,而且在VC中编程的同时要注意要添加命名空间(std):using namespace std;
头文件包含了以下对象:
窄字符(char)
- cin:标准输入流
- cout:标准输出流
- cerr:错误的标准输出流
- clog:用于记录的标准输出流
宽字符(wchar_t)
- wcin:标准输入流(宽)
- wcout:标准输出流(宽)
- wcerr:错误的标准输出流(面向广角)
- wclog:用于记录的标准输出流(宽)
DEVc++的坑
DEVc++感觉界面挺好看,代码有不同的高亮,更加清晰明了。但是好像错误提示有点弱,今天我在写一个判断应该写 == 结果粗心写成了 = ,但并没报错,然后运行的结果一直不对,看了半天才排查出来。哎,可能还是自己菜。不知道VC6.0有没有这样的报错提示。
[Error] ‘:main’ must return "int’
再devcpp上运行,报错信息[Error] ‘:main’ must return “int”,查了资料后,网上有人说:
main函数必须返回int类型。这个要求是C99提出的,所以采用C99及以后标准的编译器,都会强制要求main函数返回int类型。即这样:
int main()
{
...
return 0;
}
而现在很多书都不注意规范,用着老编译器,这种事情毫不在意,写成main()
和void main()
的屡见不鲜,这个需要个人注意,严格按照标准来。
二、C中的定义
-
问题一:
typedef int SElemType;
为什么要这样定义?
定义不同的数据类型名称是为了程序的可读性。一旦你需要将类型变换比如使用double型的,只要写:
typedef double ElemType;如果没有定义的话就要一个个的把int改成double,这样操作起来会很麻烦。 -
问题二:
#define STACKINCREMENT 10
什么意思?
#define是C语言中的一个预处理指令,其中的“#”表示这是一条预处理命令·。表示定义一个常量STACKINCREMENT
,而且一定不要加;
分号,要不然程序报错。其定义的一般形式为:#define 标识符 字符串
-
问题三:typedef相关的是啥?
typedef struct{ //栈结构类型定义(栈顶指针、栈低指针、栈大小)
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
typedef
是类型定义的意思。typedef struc
t 是为了使用这个结构体方便。具体区别在于:
若struct node{ }这样来定义结构体的话。在定义 node 的结构体变量时,需要这样写:struct node n;
若用typedef,可以这样写:typedef struct node{}NODE; 。在申请变量时就可以这样写:NODE n;
其实就相当于 NODE 是node 的别名。区别就在于使用时,是否可以省去struct这个关键字。