程序环境和预处理

1.程序的翻译环境和执行环境:

在ANSI C的任何一种实现中,存在两个不同的环境

1.翻译环境:源代码被转换为可执行的机器指令

2.执行环境:用于实际执行代码

.c(源文件)经过编译器生成.obj(目标文件)

2.预处理详解:

2.1预定义符号:

__FILE__进行编译的源文件
__LINE__文件当前的行号
__DATE__文件被编译的日期
__TIME__文件被编译的时间
__STDC__如果编译器遵循ANSI C其值为1,否则未定义

注:__是由两个下划线"_"构成

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("file: %s line=%d date:%s time:%s i=%d\n",__FILE__,__LINE__,__DATE__,__TIME__, i);
	}
	return 0;
}

#define 定义标识符后面不需要加分号

#define 定义宏:

#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(#define macro)。

宏的声明方式:

#define name( parament-list ) stuff

注意:参数列表的左括号必须跟 name 紧邻。

#和##的作用:

#define PRINT(N) printf("the value of "#N" is %d\n",N)//#N 相当于是替换成"a"
int main()
{
	//printf("hello world\n");
	//printf("hello ""world\n");//打印出来结果一样
	int a = 10;
	PRINT(a);
	return 0;
}
#define CAT(class,num) class##num //将两个字符串合并成一个
int main()
{
	int class120 = 100;
	printf("%d\n", CAT(class, 120));
	return 0;
}

#undef:

用于移出一个宏定义

#define M 100
int main()
{
	printf("%d\n", M);
#undef M
	printf("%d\n", M);//未定义标识符
	return 0;
}

条件编译:

在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令。(在某些条件下编译,条件满足就编译,条件不满足就不编译,编译器会在预处理阶段进行取舍)

常见的条件编译指令:

1.

#if 常量表达式

...

#endif

例如:

int main()
{
#if 0
	printf("hehe\n");//表达式为假则不编译
#endif 
	return 0;
}

2.

#if 常量表达式

//...

#elif 常量表达式

//...

#else 

//....

#endif

3.判断是否被重定义

#define MAX 100
#ifndef MAX//如果未被定义表达式则为真,执行后续内容
int main()
{
	printf("hehe\n");
	return 0;
}
#endif

头文件被包含的方式:

<>和" "的区别是查找策略的不同

<>查找策略:直接去库目录下查找

" "查找策略:首先在代码路径下查找,如果查找不到则在库目录下查找

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值