C语言中的小知识点(程序环境和预处理篇(1))

系列文章目录


文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 一、编译+链接是什么?
    • (一)、翻译环境
  • 二、预处理的讲解
    • 1.预定义符号
    • 2.#define定义标识符
  • 总结

前言

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

第一种是翻译环境,在这个环境中源代码被转换成可执行的机器指令。
第二种是执行环境,它用于实际执行代码。


一、编译+链接是什么?

(一)、翻译环境

首先我们先以一幅图来导入我们本章其中的知识点。

C语言中的小知识点(程序环境和预处理篇(1))_第1张图片

1、组成一个程序的每一个源文件通过编译过程分别转换成目标代码(object code)
2、每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。
3、链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。

二、预处理的讲解

1.预定义符号

C语言中的小知识点(程序环境和预处理篇(1))_第2张图片

FILE //进行编译的源文件
LINE //文件当前的行号
DATE //文件被编译的日期
TIME //文件被编译的时间
STDC//如果编译器遵循ANSI C,其值为1,否则未定义

此时我就带大家来测试一下关于vs这款微软制作的编辑器是否遵循ANSI C标准,我们会发现在vs这款编译器中是不支持这个标识符的,所以可以得出微软制作的这款vsstudio不是遵循ANSI C的C语言中的小知识点(程序环境和预处理篇(1))_第3张图片

2.#define定义标识符

语法:#define stu student


#define MAX 1000
#define reg register          //为 register这个关键字,创建一个简短的名字
#define do_forever for(;;)     //用更形象的符号来替换一种实现
#define CASE break;case        //在写case语句的时候自动把 break写上。
// 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。
#define DEBUG_PRINT printf("file:%s\tline:%d\t \
                          date:%s\ttime:%s\n" ,\
__FILE__,__LINE__ ,       \
__DATE__,__TIME__ )  

那么此时我就想提一个疑问出来了?在define定义标识符的时候,要不要在最后加上:?
如一下代码所示,我们发现在编译器上他是报错的,那么这是为什么呢?我很不解不是说define可以定义嘛?为什么这又不行了呢?其实在预编译的过程中它会转换成这样,我们可以想象一下正常情况下if如果有两条以上的语句,那么我们是不是需要加上括号呢?对没错,是的,我们需要加上,那是不是我们就在不经意之间,突然就犯了一个致命的错误,并且我们还不知道!

C语言中的小知识点(程序环境和预处理篇(1))_第4张图片

#include

#define MAX 1000;
#define reg register          //为 register这个关键字,创建一个简短的名字
#define do_forever for(;;)     //用更形象的符号来替换一种实现
#define CASE break;case        //在写case语句的时候自动把 break写上。
// 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。
#define DEBUG_PRINT printf("file:%s\tline:%d\t \
                          date:%s\ttime:%s\n" ,\
__FILE__,__LINE__ ,       \
__DATE__,__TIME__ )  

int main()
{
	int max = 0;
	if (1)
		max = MAX;
	else
		max = 0;
	return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0M8fIa9i-1681278852763)(htC语言中的小知识点(程序环境和预处理篇(1))_第5张图片]
tps://img-blog.csdnimg.cn/b2bd2e4546814d598c00d195515f4c0b.png)


总结

以上就是今天要讲的内容,本文仅仅简单介绍了程序环境和预处理!我们下期再见!

你可能感兴趣的:(c语言,开发语言)