做搜狗手机网站优化点积分商城平台

pingmian/2025/10/7 15:06:04/文章来源:
做搜狗手机网站优化点,积分商城平台,杭州市规划建设网站,佛山市网站建设分站企业目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段#xff1a; 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3 #define 替换规则 3.2.4 #和## 1. 程序的翻译环境和执… 目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段 2.3 运行环境 3. 预处理详解 3.1 预定义符号  3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3 #define 替换规则 3.2.4 #和## 1. 程序的翻译环境和执行环境 在ANSI C的任何一种实现中存在两个不同的环境。 第1种是翻译环境在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境它用于实际执行代码。 2. 详解编译链接 2.1 翻译环境 组成一个程序的每个源文件通过编译过程分别转换成目标代码object code。 每个目标文件由链接器linker捆绑在一起形成一个单一而完整的可执行程序。 链接器同时也会引入标准C函数库中任何被该程序所用到的函数而且它可以搜索程序员个人 的程序库将其需要的函数也链接到程序中。  2.2 编译本身也分为几个阶段 看代码 sum.c int g_val 2016; void print(const char *str) {printf(%s\n, str); } test.c #include stdio.h int main() {extern void print(char *str);extern int g_val;printf(%d\n, g_val);print(hello bit.\n);return 0; } 如何查看编译期间的每一步发生了什么呢  test.c #include stdio.h int main() {int i 0;for(i0; i10; i){printf(%d , i);}return 0; } 1. 预处理 选项 gcc -E test.c -o test.i 预处理完成之后就停下来预处理之后产生的结果都放在test.i文件中。 2. 编译 选项 gcc -S test.c 编译完成之后就停下来结果保存在test.s中。 3. 汇编 gcc -c test.c 汇编完成之后就停下来结果保存在test.o中。 2.3 运行环境 程序执行的过程 1. 程序必须载入内存中。在有操作系统的环境中一般这个由操作系统完成。在独立的环境中程序 的载入必须由手工安排也可能是通过可执行代码置入只读内存来完成。 3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈stack存储函数的局部变量和返回 地址。程序同时也可以使用静态static内存存储于静态内存中的变量在程序的整个执行过程 一直保留他们的值。 4. 终止程序。正常终止main函数也有可能是意外终止。2. 程序的执行便开始。接着便调用main函数。 3. 预处理详解 3.1 预定义符号 __FILE__      //进行编译的源文件 __LINE__     //文件当前的行号 __DATE__    //文件被编译的日期 __TIME__    //文件被编译的时间 __STDC__    //如果编译器遵循ANSI C其值为1否则未定义 这些预定义符号都是语言内置的。 举个例子 printf(file:%s line:%d\n, __FILE__, __LINE__);  3.2 #define 3.2.1 #define 定义标识符 语法 #define name stuff 举个例子 #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 MAX 1000; #define MAX 1000建议不要加上 ; ,这样容易导致问题。 比如下面的场景 if(condition)max MAX; elsemax 0;这里会出现语法错误。 3.2.2 #define 定义宏 #define 机制包括了一个规定允许把参数替换到文本中这种实现通常称为宏macro或定义 宏define macro。 下面是宏的申明方式 #define name( parament-list ) stuff 其中的 parament-list 是一个由逗号隔开的符号表它们可能出现在stuff中。 注意 参数列表的左括号必须与name紧邻。 如果两者之间有任何空白存在参数列表就会被解释为stuff的一部分。 如 #define SQUARE( x ) x * x 这个宏接收一个参数 x . 如果在上述声明之后你把  SQUARE( 5 ); 置于程序中预处理器就会用下面这个表达式替换上面的表达式 5 * 5 警告 这个宏存在一个问题 观察下面的代码段 int a 5; printf(%d\n ,SQUARE( a 1) ); 乍一看你可能觉得这段代码将打印36这个值。 事实上它将打印11. 为什么  替换文本时参数x被替换成a 1,所以这条语句实际上变成了 printf (%d\n,a 1 * a 1 ); 这样就比较清晰了由替换产生的表达式并没有按照预想的次序进行求值。 在宏定义上加上两个括号这个问题便轻松的解决了 #define SQUARE(x) (x) * (x) 这样预处理之后就产生了预期的效果  printf (%d\n,(a 1) * (a 1) ); 这里还有一个宏定义 #define DOUBLE(x) (x) (x)  定义中我们使用了括号想避免之前的问题但是这个宏可能会出现新的错误。 int a 5; printf(%d\n ,10 * DOUBLE(a));  这将打印什么值呢 warning 看上去好像打印100但事实上打印的是55. 我们发现替换之后  printf (%d\n,10 * (5) (5)); 乘法运算先于宏定义的加法所以出现了 55  这个问题的解决办法是在宏定义表达式两边加上一对括号就可以了。 #define DOUBLE( x)   ( ( x ) ( x ) ) 提示 所以用于对数值表达式进行求值的宏定义都应该用这种方式加上括号避免在使用宏时由于            参数中 的操作符或邻近操作符之间不可预料的相互作用。  3.2.3 #define 替换规则 在程序中扩展#define定义符号和宏时需要涉及几个步骤。 1. 在调用宏时首先对参数进行检查看看是否包含任何由#define定义的符号。如果是它          们首先 被替换。 2. 替换文本随后被插入到程序中原来文本的位置。对于宏参数名被他们的值所替换。 3. 最后再次对结果文件进行扫描看看它是否包含任何由#define定义的符号。如果是就          重复上 述处理过程。 注意 1. 宏参数和#define 定义中可以出现其他#define定义的符号。但是对于宏不能出现递归。 2. 当预处理器搜索#define定义的符号的时候字符串常量的内容并不被搜索。 3.2.4 #和## 如何把参数插入到字符串中 首先我们看看这样的代码 int i 10; #define PRINT(FORMAT, VALUE)\printf(the value of #VALUE is FORMAT \n, VALUE); ... PRINT(%d, i3);//产生了什么效果 这里输出的是不是 hello bit 答案是确定的 是。 我们发现字符串是有自动连接的特点的。  1. 那我们是不是可以写这样的代码 #define PRINT(FORMAT, VALUE)\  printf(the value is FORMAT\n, VALUE); ... PRINT(%d, 10); 这里只有当字符串作为宏参数的时候才可以把字符串放在字符串中。 1. 另外一个技巧是 使用 # 把一个宏参数变成对应的字符串。 比如  int i 10; #define PRINT(FORMAT, VALUE)\printf(the value of #VALUE is FORMAT \n, VALUE); ... PRINT(%d, i3);//产生了什么效果 代码中的 #VALUE 会预处理器处理为 VALUE . 最终的输出的结果应该是 the value of i3 is 13 ## 的作用  ##可以把位于它两边的符号合成一个符号。 它允许宏定义从分离的文本片段创建标识符 #define ADD_TO_SUM(num, value) \sum##num value; ... ADD_TO_SUM(5, 10);//作用是给sum5增加10. 注 这样的连接必须产生一个合法的标识符。否则其结果就是未定义的。

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

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

相关文章

站长是什么职位建设一个私人视频网站

2012年我入职TCL,在TCL我体会到了团队建设的文化,也正是经历了那段职场,我明白了很多「可意味不可言传」。那时候我们经常五十成群出去吃饭、喝酒、唱歌;上学那会我很不喜欢团队活动,特别是室内的活动,总感…

深圳市南山网站建设上海住建部网站

目录 一、目标1:调用exe文件 二、目标2:调用exe打开文件 一、目标1:调用exe文件 1、subprocess 模块允许在 Python 中启动一个新的进程,并与其进行交互 2、subprocess.run() 函数来启动exe文件 3、subprocess.run(["文件路…

阅读网站建设中国建设教育协会是个什么网站

根据sql解析获取到表到表, 字段到字段间的关系,即血缘关系。实际上这是从sql文本获取到数据流的过程。 大致步骤如下: 1.sql文本进行词法分析 2.sql语法分析获取到AST抽象语法树 3.访问AST抽象语法树根据语法结构推测出数据的流向,例如create as select from 这种结…

wifiu盘做网站陕西网站备案注销

一、算法思想 给定一个无序数列,模拟一个指针从第0位开始向后,始终保持当前位置左边的数列是有序的。 指针位置上的元素依次与前面的元素比较,当遇到小于自己的数或右边已经没有元素时,都停止比较,开始下一轮。 生活…

深圳龙岗高端网站建设网站程序开发外包

Transformer概述 相比LSTM和GRU模型,Transformer模型有两个显著的优势: Transformer能够利用分布式GPU进行并行训练,提升模型训练效率。 在分析预测更长的文本时,捕捉间隔较长的语义关联效果更好。 Transformer模型的作用 基于seq…

网站开发公司照片网站建设调研

在部署一个cms项目到服务器上的时候,因为cms的模板比较老,服务器上用的php是5.3.3版(大于5.3,可以认为是新的),有些页面会显示“deprecated”类别的错误信息。安全起见要抑制页面中的错误信息输出&#xff…

学做网站的书哪些好定制网站报价

入口我们从使用功能上去读取源码,通常的用法是这个样子-> 我们设置layoutmanager,GridLayouManager 继承LinearLayoutManager,所以我们就LinearLayoutManager 为基准查看rv.layoutManager GridLayoutManager(this,5)rv.addItemDecoration…

咚咚抢网站怎么做的怎么免费推广自己的业务

题外话:栅格布局最初是在web 端应用的,为了解决一个系统在不同的屏幕,和不同的设备上可以不进行多次开发的问题,希望一次开发可以最大化的适配用户的不同类型设备,解决方案:将屏幕采用断点的方式进行布局分…

seo网站优化方法阿里云商标注册入口

欧拉函数的定义 1∼N1∼N 中与 NN 互质的数的个数被称为欧拉函数&#xff0c;记为 ϕ(N)ϕ(N)。 若在算数基本定理中&#xff0c;Npa11pa22…pammNp1a1p2a2…pmam&#xff0c;则&#xff1a; ϕ(N)ϕ(N) Np1−1p1p2−1p2…pm−1pm 代码&#xff1a; #include<iostream>…

五金表带厂东莞网站建设电商网站建设课程设计实验报告

要将CentOS从动态内网IP改为静态IP&#xff0c;需要按照以下步骤进行操作&#xff1a; 打开终端并以root用户身份登录。 编辑网络配置文件。在终端中输入以下命令&#xff1a; vi /etc/sysconfig/network-scripts/ifcfg-eth0 这个命令将打开eth0配置文件。如果您的网络接口…

石家庄高端网站开发wordpress更新文章收录

JavaBean 是特殊的 Java 类&#xff0c;使用 Java 语言书写&#xff0c;并且遵守 JavaBean API 规范。 接下来给出的是 JavaBean 与其它 Java 类相比而言独一无二的特征&#xff1a; 提供一个默认的无参构造函数。需要被序列化并且实现了 Serializable 接口。可能有一系列可读…

重庆建设工程造价信息总站制作网站软件网站

Python实现学生信息管理系统-详解版 个人简介实验名称&#xff1a;学生信息管理系统系统功能实验步骤详讲添加入住学生信息删除学生的住宿信息修改学生的住宿信息查询学生的住宿信息显示所有学生住宿信息显示所有请假学生的信息 运行截图展示1.主界面2.添加新的入住学生信息3.显…

关于网站建设管理工作的报告沈阳京科医院

目录 一、docker是什么 核心概念 二、docker安装 1、卸载docker 2、使用yum 安装 三、docker常用命令 1、帮助命令 2、镜像命令 1&#xff09;查看镜像 2&#xff09;查询镜像 3&#xff09;拉取镜像 4&#xff09;删除镜像 3、容器命令 四、容器数据卷 五、Dock…

包头建设厅官方网站怎么查网站是哪个公司做的

一、设置参数&#xff1a;java虚拟机可以使用JAVA_HOME/bin/java&#xff08;JAVA_HOME为jdk的安装目录&#xff09;。java进程命令行语法&#xff1a; java [options] class [args...] classpath path&#xff1a;指定Java虚拟机应该搜索类文件的路径。与javac编译器选项-cp相…

湛江网站关键词优化西安中高风险地区

前言:Hello大家好,我是小哥谈。SimSPPF是YOLOv6中提出的一种改进的空间金字塔池化方法,它是SPPF的升级版。SimSPPF通过在不同尺度上使用不同大小的池化核来提取特征,从而提高了检测器的性能。与SPPF相比,SimSPPF可以在不增加计算成本的情况下提高检测器的性能。本节课就教…

重庆网站建设团队做维修那个网站发布信息好

一、概述 本文主要介绍如何配置USART&#xff0c;并通过USART打印验证结果。以stm32f10为例&#xff0c;将PA9、PA10复用为USART功能&#xff0c;使用HSE PLL输出72MHZ时钟 APB2 clk不分频提供配置9600波特率。波特率计算公式如下&#xff1a; fck即为APB2 clk参考计算&#xf…

做网站百度一下整屏网站模板

12月26日,由中国领先的财经信息服务平台蓝鲸、记者工作平台鲸平台主办,主流财经通讯社财联社联合主办的第四届“鲸潮奖”在沪揭晓,知名睡眠科技品牌MLILY梦百合入选,荣获“2023年度最‘硬’科技奖”,其他获奖品牌还有新希望乳业、上海家化、洽洽食品、361、汤臣倍健等。 鲸潮奖…

做境外旅游的网站温州建筑信息平台

相信不少小伙伴面试时&#xff0c;都被问到过这样一个问题&#xff1a;进程和线程的区别是什么&#xff1f;大学老师会告诉我们&#xff1a;进程是资源分配的基本单位&#xff0c;线程是调度的基本单位。说到调度&#xff0c;就不得不提到CPU的上下文切换了。 何为CPU上下文切换…

深圳网站设计小程序外贸 网站推广

对我而言&#xff0c;使用Rx-java的最大好处之一就是无论底层调用是同步还是异步&#xff0c;因此代码看起来都完全相同&#xff0c;因此该条目的标题也是如此。 考虑一个非常简单的客户端代码用例&#xff0c;它执行三个缓慢运行的调用并将结果合并到一个列表中&#xff1a; …

手机建造网站江苏SEO网站建设

题目链接&#xff1a;http://poj.org/problem?id3041 没看题&#xff0c;网上搜最大二分匹配搜到的 匈牙利算法&#xff0c;深搜一次最多增加一个匹配 代码&#xff1a; #include <stdio.h> #include <stdlib.h> int tu[505][505]; int mx[505],my[505]; int flag…