#pragma指令可以用于实现相关的控制与扩展: 源码表控制, 结构压缩, 以及警告去除等等。
一些头文件中, 有#pragma once, 其实和#ifndef技巧等价, 可以避免所在的文件在一个单独编译中只包含一次。 比#ifndef的好处就是拥有较少的代码, 避免名称到碰撞。
例如下面:
-
grandparent.h
#pragma once
struct foo
{
int member;
};
-
parent.h
#include "grandparent.h"
-
child.c
#include "grandparent.h"
#include "parent.h"
另外, 使用#pragma pack(push(n))可以进行结构体的对齐设置, 参见之前写的关于struct包含的字节问题的博客。