预处理器(6)其他预编译指令

1.#error

//main.cpp
#include<stdio.h>

#error 数组未分配空间!

int main()
{
	int a[];
	return 0;
}


编译器会生成如下错误信息:

main.cpp(4): fatal error C1189: #error :  数组未分配空间!
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

通过#error指令我们可以自定义错误信息。(我感觉这个用处不大)

2.#line

#line用来修改__LINE__和__FILE__的值。

#include<stdio.h>
//#line 100 "m.c"
int main()
{
	printf("%s\n",__FILE__); 
	printf("%d\n",__LINE__);
	printf("%d\n",__LINE__);
	return 0;
}


#line的指令格式如下:

#line number "filename"


number是当前行号,filename是当前的文件名。

 上面的程序会输出:

d:\用户目录\documents\visual studio 2010\projects\preprocessor\preprocessor\main.cpp
6
7

如果把//#line 100 "m.c"的注释去掉,运行结果就变成了:

d:\用户目录\documents\visual studio 2010\projects\preprocessor\preprocessor\m.c
103
104

这就达到了,在预编译中修改行号和文件名字的目的。

 

3.#pragma

 这条指令受编译器限制。

不同编译器对其解释不同。

下面是一个简单的应用。

#include<stdio.h>

#pragma pack(1)

struct Data
{
	char a;
	int  b;
	char c;
};
int main()
{
	printf("%d\n",sizeof(struct Data));
	return 0;
}

 


上面的程序用来设置结构体中变量方式,

语法:#pragma pack(n) 设置变量以n字节对齐方式

如果不添加#pragma pack(1)这条语句的话,struct Data会按默认对齐方式以12字节存储。

添加之后,struct Data会按照一个字节的方式对齐,则以6个字节存储。1(char)+4(int)+1(char)=6

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值