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

news2024/11/29 10:52:01

系列文章目录


文章目录

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

前言

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

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


一、编译+链接是什么?

(一)、翻译环境

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

在这里插入图片描述

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

二、预处理的讲解

1.预定义符号

在这里插入图片描述

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

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

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

在这里插入图片描述

#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在这里插入图片描述]
tps://img-blog.csdnimg.cn/b2bd2e4546814d598c00d195515f4c0b.png)


总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422942.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb开发 —— HTML

目录 一、什么是HTML、CSS 二、内容介绍 三、基本标签 & 样式 1. 实现标题 1.1 标题排版 1.2 标题样式 1.3 超链接 2. 实现正文 2.1 正文排版 2.2 页面布局 四、表格标签 五、表单标签 1. 表单标签 2. 表单项标签 一、什么是HTML、CSS HTML ( HyperTex…

MAC 删除自带 ABC 输入法的方法

背景&#xff1a; 在使用 ​​mac​​​ 时相信很多都习惯使用第三方输入法&#xff0c;而 ​​mac​​​ 规定必须保留一个自带的 ​​ABC​​​ 输入法&#xff0c;这样导致平时在打字的时候&#xff0c;老是莫名其妙的自己切换成了自带的 ​​ABC​​​ 输入法&#xff0c;…

【java】JDK动态代理原理

文章目录1. 示例2. 原理3. 为什么必须要基于接口&#xff1f;1. 示例 首先&#xff0c;定义一个接口&#xff1a; public interface Staff {void work(); }然后&#xff0c;新增一个类并实现上面的接口&#xff1a; public class Coder implements Staff {Overridepublic vo…

Rancher v2.5 使用 Ingress Controller 限制集群外部 ip 访问集群服务

使用 Ingress Controller 限制集群外部 ip 访问集群服务 Rancher 部署工作负载&#xff0c;通过 NodePort 将 Service 服务映射后&#xff0c;无法通过防火墙策略对集群外客户端访问进行限制&#xff0c;在公司研发环境内存在风险&#xff0c;易被扫描到。 经过查找资料&#x…

HNU-操作系统OS-2023期中考试

今天考了OS期中考试&#xff0c;特别傻地最后改错了一道10分的题目&#xff0c;很难受。应该是考差了。 回忆一下今天考试的题目&#xff0c;为可能需要的后继者提供帮助&#xff08;往年期中考题极难获得&#xff09; 我这里先给出题目&#xff0c;有时间我再补充答案&#…

FVM链的Themis Pro(0x,f4) 5日IDO超百万美元,领Filecoin重回高点

交易一直是 DeFi 乃至web3领域最经久不衰的话题&#xff0c;也因此催生了众多优秀的去中心化协议&#xff0c;如 Uniswap 和 Curve。这些协议逐渐成为了整个系统的基石。 在永续合约方面&#xff0c;DYDX 的出现将 WEB2 时代的订单簿带回了web3。其链下交易的设计&#xff0c;仿…

【云原生概念和技术】1.2 云原生技术概括(中)

如果想了解或者学习云原生的友友们&#xff0c;欢迎订阅哦&#xff5e;&#x1f917;&#xff0c;目前一周三更&#xff0c;努力码字中&#x1f9d1;‍&#x1f4bb;…目前第一章是一些介绍和概念性的知识&#xff0c;可以先在脑海里有一个知识的轮廓&#xff0c;从第二章开始就…

php://filter

一 php://filter 官方&#xff1a;php://filter 是一种元封装器&#xff0c; 设计用于数据流打开时的筛选过滤应用。 这对于一体式&#xff08;all-in-one&#xff09;的文件函数非常有用&#xff0c;类似 readfile()、 file() 和 file_get_contents()&#xff0c; 在数据流内…

黑群晖激活Active Backup for Business套件 DSM6、7

​ 第一步 http://URL:PORT/webapi/auth.cgi?apiSYNO.API.Auth&methodLogin&version1&account管理员用户名&passwd密码 http://192.168.8.160:5000/webapi/auth.cgi? apiSYNO.API.Auth&methodLogin&version1&accountadmin&passwd123456 说…

Spring Boot 监控

目录 1.概述 2.使用 2.1.依赖 2.2.配置 2.2.1.默认 2.2.2.暴露端点 2.3.常用端点 2.3.1.health 2.3.2.metrics 2.3.3.loggers 2.3.4.beans 2.3.5.用于定位线上问题的端点 2.4.自定端点 1.概述 Spring Boot Actuator提供了对Spring Boot应用进行监控的能力&#…

哈希表(HashTable)

哈希表&#xff08;HashTable&#xff09;1. 相关概念2. 哈希函数选择&#xff08;常用&#xff09;3. 哈希冲突&#xff08;常用&#xff09;开散列法/哈希桶法/链地址法&#xff1a;4. Set接口及实现类4.0 常用方法4.1 HashSet4.2 LinkedHashSet4.3 TreeSet4.4 例题1. 相关概…

第八章 Attention

目录8.1 Attention 的结构8.1.1 seq2seq 存在的问题8.1.2 编码器的改进8.1.3 解码器的改进 ①8.1.4 解码器的改进 ②8.1.5 解码器的改进 ③8.2 带 Attention 的 seq2seq 的实现8.2.1 编码器的实现8.2.2 解码器的实现8.2.3 seq2seq 的实现8.3 Attention 的评价8.3.1 日期格式转换…

【数据结构】6.5 红黑树(C++)

【数据结构】——6.5 红黑树 没有学过二叉搜索树&#xff08;也叫二叉排序树或二叉查找树&#xff09;的小伙伴们建议先学习一下&#xff0c;这样阅读会更轻松哦 点我学习二叉搜索树 目录一、红黑树的概念和性质二、红黑树的存储结构和声明三、红黑树的构建过程四、红黑树的实现…

淘宝客户失率高怎么办?什么因素会影响?

电商干货 商家开淘宝店铺的时候&#xff0c;很怕的是老客户流失了。或者说经常购买的人不买了&#xff0c;这是淘宝店铺的客户流失。 那么当我们遇到淘宝的客户流失率很高的时候该怎么办呢&#xff1f;有什么样的因素会造成影响呢? 淘宝客户流失率高怎么办 1、做好质量营销 质…

Trimble RealWorks处理点云数据(七)之点云导入3dmax

效果 背景 有时候我们需要通过点云数据来逆向建模,而建模软件常用的有3dmax,SketchUp等,那如何将点云数据导入3dmax来建模呢,下面我们来了解下 步骤 1、las导入Trimble RealWorks 2、对点云数据预处理 可以参考这篇文章 TrimbleRealWorks点云数据预处理 3、导出rcp格式…

语音芯片在射击游乐设备上的应用

射击打靶体验馆项目&#xff0c;产品设备仿真程度高、趣闻性强、外观逼真&#xff0c;现场体验是一种集体验&#xff0c;体育竞技为一体且室内外均可使用的游乐&#xff01; 在靶上能够看到击中目标的效果&#xff0c;而且会语音报环靶&#xff0c;通过低音炮&#xff0c;可以…

Pytorch基础 - 6. torch.reshape() 和 torch.view()

目录 1. torch.reshape(shape) 和 torch.view(shape)函数用法 2. 当处理的tensor是连续性的(contiguous) 3. 当处理的tensor是非连续性的(contiguous) 4. PyTorch中的contiguous 在本文开始之前&#xff0c;需要了解最基础的Tensor存储方式&#xff0c;具体见 Tensor数据类…

Spring常见面试题汇总

文章目录在Spring中&#xff0c;Bean的作用域有哪几个&#xff1f;SpringMVC的执行流程你知道吗&#xff1f;谈谈你对Spring IOC的理解&#xff1f;DI又是什么&#xff1f;谈谈你对Spring AOP的理解&#xff1f;Spring Bean的生命周期你能说出多少&#xff1f;Spring如何解决循…

sggJava基础第三天

运算符 运算符是一种特殊的符号&#xff0c;用以表示数据的运算、赋值和比较等。 算术运算符 赋值运算符 比较运算符&#xff08;关系运算符&#xff09; 逻辑运算符 位运算符&#xff08;这个几乎不使用&#xff0c;我们在讲解的时候了解一下即可&#xff0c;只不过…

敏捷团队如何在 PingCode 这类敏捷开发工具中管理 Scrum 开发管理流程

在本教程中&#xff0c;我们将在 PingCode 中介绍如何使用 Scrum 项目、创建产品待办列表和规划迭代、举行 Scrum 会议等详细流程。准备工作&#xff1a;已创建 PingCode 软件帐户 【免费注册通道】 什么是Scrum&#xff1f;Scrum 是国内外最热门的敏捷开发框架之一。Scrum 通…