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

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

前言

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

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

第二种是执行环境,它用于实际执行代码。

一、编译+链接是什么?

(一)、翻译环境

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

64671f502bbc4966b457ea1af98c0815.png

1、组成一个程序的每一个源文件通过编译过程分别转换成目标代码(object code)

2、每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。

3、链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。

二、预处理的讲解

1.预定义符号

f8c381d21211406ca94d4b4f7e724a1d.png

FILE //进行编译的源文件

LINE //文件当前的行号

DATE //文件被编译的日期

TIME //文件被编译的时间

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

此时我就带大家来测试一下关于vs这款微软制作的编辑器是否遵循ANSI C标准,我们会发现在vs这款编译器中是不支持这个标识符的,所以可以得出微软制作的这款vsstudio不是遵循ANSI C的

acd7108dbdd8452d911ab9e18c3fe3e0.png

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如果有两条以上的语句,那么我们是不是需要加上括号呢?对没错,是的,我们需要加上,那是不是我们就在不经意之间,突然就犯了一个致命的错误,并且我们还不知道!

9475ec99b9754ed09ee36a728ae36ed5.png

#include<stdio.h>
#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)(ht

eeb7ad31264d45128ebd4997c50ac3d9.png

]

tps://img-blog.csdnimg.cn/b2bd2e4546814d598c00d195515f4c0b.png)

总结

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

目录
相关文章
|
1月前
|
C语言
最简单的C语言程序示例
最简单的C语言程序示例
21 0
|
1月前
|
Serverless C语言
C语言程序通常具有以下基本结构
C语言程序通常具有以下基本结构
10 0
|
19天前
|
存储 编译器 C语言
深入探索C语言动态内存分配:释放你的程序潜力
深入探索C语言动态内存分配:释放你的程序潜力
28 0
|
23天前
|
存储 编译器 C语言
C语言核心知识点总结
【4月更文挑战第5天】C语言核心知识点:包括数据类型(整型、字符型、实型、枚举型)、运算符(算术、关系、逻辑、位、赋值)、控制语句(条件、循环、跳转)、函数、指针、数组、结构体和预处理器(宏定义、条件编译)。这些概念构成了C语言的基础,支持高效系统及应用软件开发。
19 5
|
1月前
|
存储 Serverless C语言
C语言程序的结构
C语言是一种广泛使用的编程语言,其程序结构清晰,易于理解。下面我们将详细探讨C语言程序的基本结构,并通过一个示例代码来展示这些组成部分是如何协同工作的。 一、C语言程序的基本结构
14 0
|
1月前
|
程序员 C语言
最简单的C语言程序举例
C语言是一种广泛使用的计算机编程语言,适合用于系统编程,也可以用于编写应用程序。它的语法清晰明了,功能强大,是很多程序员的首选语言。下面,我们将通过一个最简单的C语言程序来介绍其基本结构和语法。
26 0
|
1月前
|
前端开发 Unix Linux
Linux indent命令 (格式化C语言源代码的程序)
Linux indent命令 (格式化C语言源代码的程序)
18 0
Linux indent命令 (格式化C语言源代码的程序)
|
1月前
|
存储 编译器 C语言
|
C语言
我们要掌握好多少C语言知识点才能做好C语言项目?
我们要掌握好多少C语言知识点才能做好C语言项目?
1215 0
|
18天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
28 0