这个标记其实是很复杂的,它是什么特点呢,它是根据你的编译平台,就是根据你所用的不同的编译器然后你再不同的环境下,它可以有不同的表达,它能干好多不同的事,都是这一个标记,那么它取决于你后写什么东西。
例如我们使用GCC的编译器呢它就有这么几种用法:
#pragma GCC dependency<</SPAN>文件> unix_c_01.c.txt 若《文件》比此文件新 则产生警告
#pragma GCC poison <</SPAN>标识> 若出现<</SPAN>标识> 则产生错误
#pragma pack( 1/2/4/8) 按1、2、4、8字节对齐补齐
Dependency 依赖的意思意思就是说我的当前的文件,正在编译的文件它要依赖于《文件》,就是说你后面写的文件比你正在编译的文件要新的话,就是文件修改时间比它晚会给你一个警告,就是说我的编译文件依赖于写的文件但是你的依赖文件改了而在编译的文件并没有同步的更新,就有可能产生各种各样的问题,就给个警告一旦发现后面的文件比当前文件新就给个警告,
Poison 毒药的意思 、就是说如果我代码中出现这样的标示就给个错误 ,比如go to 啊、因为goto有风险 就把goto 定义成毒药 如果有程序员胆敢写goto就给个错误,编译就报错。
Pack 这是指定结构体 或是类对象的对齐方式因为结构体里面有个对齐补齐的问题 32位下缺省是4字节对齐,如果我不想用这种方式,我想2字节对齐补齐或者我想1字节对齐补齐那么就用这方式。
下面代码试试:
Vi pragma.c vi编译器
#include
#pragma GCC dependency “dep.c” 依赖这个文件
Int main(void){
Return 0;
}
然后我们 touch dep.c 创建一个文件 那么这个文件就比我们pragma.c 要新 因为比它晚创建
Gcc pragma.c
提示
Pragma.c:2 警告:当前文件早于dep.c
这条警告就来自于#pragma GCC dependency “dep.c”
比如:touch pragma.c 时间就比dep.c 要晚了
这个时候在编译就不给警告了 Gcc pragma.c
什么都没有