【C语言】程序环境和预处理

本文介绍了C语言程序的翻译过程,包括预处理阶段的预定义符号如__FILE__和__LINE__,以及#define中#和##的作用。还讨论了条件编译的概念和常见指令,如#if,#ifdef,#ifndef等。
摘要由CSDN通过智能技术生成

⚡Hello~这里是傾城49⚡

🐏不定期更新知识干货~🐏

🌈点个关注不迷路~🌈

文章目录

程序的翻译环境和执行环境

翻译环境

预处理

预定义符号

#define中#和##

#undef

条件编译

总结



程序的翻译环境和执行环境

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

  1. 翻译环境,在这个环境中源代码被转换为可执行的机器指令(二进制指令)
  2. 执行环境,它用于实际执行代码。

翻译环境

  • 分为编译链接
  • 其中编译又分为预编译(预处理)编译汇编
  • 链接功能:
  1. 合并段表
  2. 符号表的合并和重定位


预处理

预定义符号

__FILE__               进行编译的源文件

__LINE__               文件当前的行号

__DATE__              文件被编译的日期

__TIME__               文件被编译的时间

__STDC__              如果编译器遵循ANSI C,其值为1,否则未定义


#define中#和##

#:把一个宏参数变成对应的字符串

#include <stdio.h>

#define PRINT(format,x) printf("the items "#x" number is "format"\n",x)  //转换成对应的字符串
int main()
{
	int a = 10;
	PRINT("%d",a);
	return 0;
}
//#x转换成对应的字符串为"a"

##:可以把位于它两边的符号合成一个符号。

        它允许宏定义从分离的文本片段创建标识符。

#include <stdio.h>

#define CAT(x,y) x##y
int main()
{
	int HW = 20;
	printf("%d\n",CAT(H, W));     //20
	return 0;
}

#undef

用于移除一个宏定义

#undef NAME

如果要重定义一个现存的名字,首先要移除旧的名字。


条件编译

常见的条件编译指令:

1.

#if  常量表达式

        ...

#endif

//常量表达式由预处理器求值

例如:

#define __LINE__ 1

#if __LINE__

        ...

#endif

2.多个分支的条件编译

#if  常量表达式

        ...

#elif  常量表达式

        ...

#else

        ...

#endif

3.判断是否被定义

#if defined(symbol)

#ifdef symbol

#if !defined(symbol)

#ifndef symbol

4.嵌套指令

#if defined(OS_UNIX)

        #ifdef OPTION1

                unix_version_option1();

        #endif

        #ifdef OPTION2

                unix_version_option2();

        #endif

#elif defined(OS_MSDOS)

        #ifdef OPTION2

                msdos_version_option2();

        #endif

#endif


总结

以上就是本篇的内容啦

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值