好久没有写过C, 下面总结下一些坑, 填坑的过程不仅感慨js/python大法好啊!

enum与typedef enum

enum 定义类型后, 再定义变量前面还要把enum加上, 否则会报错

enum TTT{A, B, C};
enum TTT ttt; //不能写作 TTT ttt;

但这个很烦人不是么, typedef的作用就来了:

typedef enum _TTT{A, B, C}TTT;
TTT ttt; //再没有讨厌的enum了

enum定义的变量至少占1个int字节

注意上面enum定义的变量至少占1个int字节,最多占1个longlong字节, 具体是编译器根据enum中的最大值确定的. 在某些RAM捉襟见肘的MCU上(比如51上只有128字节), 1int = 2byte, 真的是大大的浪费. 这时候还不如用#define大法...

#define A 0
#define B 1
#define C 2

全局变量在哪儿定义?在哪儿声明?

首先定义的方式是: int g = 0;(必须初始化)
声明的方式是加extern, 如: extern int g;
全局变量必须且只能在.c中定义(且初始化), 必须且只能在.h中声明. 当然如果其他.c文件不需要使用这个全局变量的话, 就不需要在.h中extern它.
原因1: 全面变量在.h中定义的话, .h文件的相互引用一定会造成编译器报错重复定义. 而且似乎用#ifndef大法也没有用;
原因2: 全局变量在.c中声明的话, 如果不同的.c文件都要使用的时候, 声明很可能重复且不一致,造成编译器报警.

#define, enum, typedef, 函数在哪儿声明?

我感觉, 如果是要让其他C程序使用的, 就在.h中声明, 否则, 就在本.c文件前面声明, 虽然这样c文件前面会很啰嗦...
这样在.c中声明的部分就像是private的, 在.h中声明的部分就像是public的.

标签: none 阅读量: 961

添加新评论