总结几个C 语言比较高级的编写技巧
看了一些源代码,这里总结几个不常见的,但是比较好用的C 用法。也许这些功能在C++中有扩展,但是个人基本不用C++。其实这些应该是属于预处理器的功能。若是之前没有见过,遇到时会感觉云里雾里的。
结构体直接赋值
C99 支持直接将一个结构常量赋值给对应的结构体变量。而不用每个结构成员逐一赋值。
typedef struct rectangle{
int x0;
int y0;
int x1;
int y1;
}rect_t;
void main()
{
rect_t a = {0, 0, 0, 0};
a = (rect_t) {0, 0, 1, 2};
}
如何在编译阶段就知道结构体长度?
可以定义一个数组指针:
char (*__kaboom)[sizeof( YourTypeHere )] = 1;
编译时它就会产生一个warning,这样就可以知道它的长度了:
warning C4047: 'initializing': 'DWORD (*)[88]' differs in levels of indirection from 'int'
同样也可以用 offsetof() 就知道成员的偏移量了。
直接定义字符串:
我们可以用#define 定义字符串常量,比如: #define HELLO “hello” 这样就相当于是: char *HELLO= “hello”; 而且使用#define 来定义的好处是可以直接拼接字符串,这些应该都是由预处理器来帮我们处理的(没有仔细考证,但想像其中原理应该是这样)。比如:``` #define HELLO “hello” #define WORLD “world”