当前位置: 首页 > news >正文

GCC编译器 什么是宏? 标识符和关键字

一.GCC是什么?

GCC是用于编译C语言和其它语言的开源软件。
全称是 GNU Compiler Collection,意思是GNU编译器集和。
支持多种操作系统和硬件平台。

二.GCC的作用

GCC的作用是将源码转换为可执行的文件,使之可以在计算机上运行。

三.GCC编译c文件的流程

预处理,编译,汇编和链接。
预处理阶段:gcc会处理源代码中的预处理指令,如 "#include, #define, #ifdef等。将宏(宏是什么下面有解释)展开,将头文件包含进来,生成一个.i文件。"编译阶段,gcc会将.i文件中的C语言代码转换为汇编语言代码,进行语法分析、类型检查、优化等操作,生成一个 .s 文件。汇编阶段,gcc会调用汇编器(as)将.s文件中的汇编语言代码转换为机器指令,生成一个 .o 文件。链接阶段,gcc会调用链接器(ld)将 .o 文件和所需的库文件链接在一起,解决外部引用和地址分配等问题,生成一个可执行文件。
 gcc可以一次性完成这四个步骤,也可以分步骤完成。一次性完成时,只需要在命令行中输入:<filename.c> 是要编译的C语言源代码文件名,<outputfilename> 是生成的可执行文件名。
gcc <filename.c> -o <outputfilename>

分步骤完成时,需要使用不同的选项来指定每个步骤。

gcc -E hello.c -o hello.i #预处理
gcc -S hello.i -o hello.s #编译
gcc -c hello.s -o hello.o #汇编
gcc hello.o -o hello #链接

参考链接:https://blog.csdn.net/m0_57492987/article/details/132590920

补充

宏是什么?

宏在C语言中是一段"有名称的代码片段(使用#define定义)"。
在预处理阶段会把程序中的宏名替换为对应的代码片段,然后才进入编译阶段由编译器进行编译。

#define:宏定义
#undef:取消宏定义
#ifdef:判断宏是否定义

无参宏定义

最简单的宏定义时间用指定的标识符来代表代码片段,当宏定义有多行时,需要在行尾使用\来连接。
#define 宏名称  代码片段// 如(多行时,行尾使用\作为续行符)
#define BUFFER_SIZE 1024
#define RANDOM (2.0*(double)rand() / RAND_MAX)
#define NUMBERS 1, \2, \3

带参数的宏

“形参列表”是用逗号隔开的多个标识符(也可以空,表示无参数),实参列表中的实参数量必须与宏定义中的形参数量一样多。

#define 宏名称( [形参列表] )  替换文本
// 如
#define GETCHAR() getc(stdin)
// 
#define MAX(a,b) ((a)>(b)?(a):(b))

参数要用括号括起,避免实参为表达式时出错,如

#define MULTIPLY(a, b) ((a)*(b))
MULTIPLY(1+2, 3+4)会预处理为((1+2)*(3+4)),若不加括号,则会变为1+2*3+4(意义全变)。

即使加括号,宏在一定情况下还是会产生二义性(要避免此类使用),如

#define SQUARE(a) ((a)*(a))
SQUARE(a++)会预处理为((a++)*(a++))(若a=3,则结果为3*4)。

C语言中宏简介:https://blog.csdn.net/alwaysrun/article/details/103206443

标识符是什么?

变量的名字、常量的名字、类的名字、函数的名字等。如 int a = 0; 这个是a就是标识符。标识符不能使用关键字,标识符使用字母,数字和下划线;标识符不能以数字开头,只能以字母或者下划线开头;标识符区分大小写;

关键字

int a=0;  此时的int就是关键字。

相关文章:

GCC编译器 什么是宏? 标识符和关键字

一.GCC是什么&#xff1f; GCC是用于编译C语言和其它语言的开源软件。 全称是 GNU Compiler Collection&#xff0c;意思是GNU编译器集和。 支持多种操作系统和硬件平台。二.GCC的作用 GCC的作用是将源码转换为可执行的文件&#xff0c;使之可以在计算机上运行。三.GCC编译c文…...

【GESP】2023年06月图形化三级 -- 自幂数判断

文章目录 自幂数判断【题目描述】【输入描述】【输出描述】【参考答案】其他测试用例 自幂数判断 【题目描述】 自幂数是指N位数各位数字N次方之和是本身&#xff0c;如153是3位数&#xff0c;其每位数的3次方之和是153本身&#xff0c;因此153是自幂数&#xff0c;1634是4位数…...

MySQL常见面试题

一、存储引擎相关 &#xff08;1&#xff09;MySQL 支持哪些存储引擎? MySQL支持多种存储引擎&#xff0c;比如InnoDB&#xff0c;MyISAM&#xff0c; MySQL大于等于5.5之后&#xff0c;默认存储引擎是InnoDB &#xff08;2&#xff09;InnoDB 和 MyISAM 有什么区别? InnoD…...

前端HTML CSS JS风格规范

本文代码规范来自HTML/CSS代码开发规范文档 文件命名规范 使用小写字母、数字和下划线组成文件名。 避免使用特殊字符和空格。 使用语义化的命名&#xff0c;能够清晰地表达出文件的功能或内容。 目录结构规范 使用约定俗成的目录结构&#xff0c;如&#xff1a;src/compon…...

为什么spring默认采用单例bean

概 述 熟悉 Spring开发的朋友都知道 Spring 提供了 5种 scope&#xff0c;分别是&#xff1a; singleton: 单例模式&#xff0c;当spring创建applicationContext容器的时候&#xff0c;spring会欲初始化所有的该作用域实例&#xff0c;加上lazy-init就可以避免预处理&#xf…...

Redisson分布式锁学习

之前工作中一直使用redis来实现分布式锁&#xff0c;但是最近项目使用了云弹性&#xff0c;机器会涉及到扩缩容&#xff0c;涉及到优雅停机的问题&#xff0c;普通的redis分布锁&#xff0c;一般使用时会设置锁的时间&#xff0c;但是如果在加锁期间 JVM异常重启等发生会导致分…...

Metabase:简单快捷的商业智能与数据分析工具 | 开源日报 No.61

moby/moby Stars: 66.8k License: Apache-2.0 Moby 是一个由 Docker 创建的开源项目&#xff0c;旨在实现和加速软件容器化。它提供了工具包组件的“乐高集”&#xff0c;可以将它们组装成基于容器的自定义系统的框架。组件包括容器生成工具、容器注册表、业务流程工具、运行时…...

【无标题】高流量大并发Linux TCP性能调优

最近在使用jmeter做压测&#xff0c;当jmeter的并发量高的时候发现jmeter服务器一直报错Cannot assign requested address&#xff0c; 查看了一下发现系统中存在大量处于TIME_WAIT状态的tcp端口 netstat -n | awk ‘/^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}’ TIME_W…...

优雅的用户体验:微信小程序中的多步骤表单引导

前言 在微信小程序中&#xff0c;实现一个多步骤表单引导界面既可以提供清晰的任务指引&#xff0c;又可以增加用户体验的互动性。本文将探讨如何使用微信小程序的特性&#xff0c;构建一个流程引导界面&#xff0c;帮助用户一步步完成复杂任务。我们将从设计布局和样式开始&am…...

Kotlin中的委托、属性委托和延迟加载

委托模式是一种常用的设计模式&#xff0c;用于将某个对象的责任委托给另一个对象来处理。在Kotlin中&#xff0c;委托可以通过关键字by来实现&#xff0c;主要分为类委托和属性委托两种形式。此外&#xff0c;Kotlin还提供了延迟加载的功能&#xff0c;可以在需要时才进行初始…...

轻松合并Excel工作表:Java批量操作优化技巧

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在Excel中设计表单时&#xff0c;我们经常需要对收集的信息进行统计分析。例如&a…...

计算机网络_网络层概述

4.1 网络层概述 4.1.1 一.分组转发和路由选择 网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机&#xff0c;可以将该任务划分为分组转发和路由选择两种重要的功能。 注释:A发送到B,从1端口进入. 如何得知是从2还是从3中转发出去呢?--------->这…...

自然语言处理---Transformer机制详解之GPT2模型介绍

1 GPT2的架构 从模型架构上看, GPT2并没有特别新颖的架构, 它和只带有解码器模块的Transformer很像. 所谓语言模型, 作用就是根据已有句子的一部分, 来预测下一个单词会是什么. 现实应用中大家最熟悉的一个语言模型应用, 就是智能手机上的输入法, 它可以根据当前输入的内容智…...

ChatGPT 即将诞生一周年,OpenAI 将有大动作

图片来源&#xff1a;由无界AI生成 下个月就是 ChatGPT 一周年纪念日。OpenAI 正在谋划新的大动作。可以肯定地说&#xff0c;自诞生以来&#xff0c;ChatGPT 就为 OpenAI 提供了不可阻挡的增长动力。 01 营收超预期&#xff0c;OpenAI 缓了一口气 据 The Information 报道&…...

jenkins 原理篇——pipeline流水线 声明式语法详解

大家好&#xff0c;我是蓝胖子&#xff0c;相信大家平时项目中或多或少都有用到jenkins&#xff0c;它的piepeline模式能够对项目的发布流程进行编排&#xff0c;优化部署效率&#xff0c;减少错误的发生&#xff0c;如何去写一个pipeline脚本呢&#xff0c;今天我们就来简单看…...

在ESP32-Arduino开发中添加其它Arduino库

目录 前言 原理说明 操作步骤 下载Bounce 安装Bounce 将下载的文件夹(压缩包需要解压)移动到components/arduino/libraries路径下&#xff0c;并重命名为Bounce2 查看添加库里所有的源文件位置 在arduino的CMakeList.txt里添加库源文件 使用Bounce 前言 乐鑫官方的es…...

CAN总线测试——CAN一致性之物理层

CAN一致性物理层测试项 1.最小通讯电压测试2.最大通讯电压测试3.显性位/隐性位输出电压测试4.信号跳变沿测试5. 地偏移6. 终端电阻 1.最小通讯电压测试 2.最大通讯电压测试 3.显性位/隐性位输出电压测试 4.信号跳变沿测试 5. 地偏移 6. 终端电阻...

macrodata数据集在Python统计建模和计量经济学中的应用

目录 一、数据介绍二、应用三、statsmodels 统计模块四、使用 statsmodels 统计模块分析 macrodata.csv 数据集参考 一、数据介绍 macrodata.csv是一个示例数据集&#xff0c;通常用于统计分析和计量经济学中的教育和训练目的。这个数据集通常包括以下列&#xff1a; year&am…...

【C++进阶(九)】C++多态深度剖析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 多态 1. 前言2. 多态的概念以及定义3. 多态的实…...

第二节——Vue 基本介绍

一、MV*的理解 1、概念 在计算机编程领域&#xff0c;MV*&#xff08;也称为MVC、MVP、MVVM等&#xff09;是一种用于组织和设计应用程序结构的模式。这些模式旨在实现应用程序的解耦、可维护性和可扩展性。MV代表着Model-View-&#xff08;表示控制器或视图模型等其他组件&a…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

PydanticAI快速入门示例

参考链接&#xff1a;https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...