第一个C代码讲解

文章目录

  • 编写C文件
    • 创建文本文件
    • 编写代码
    • 修改文件后缀
    • 切换文件路径
  • 编译代码
    • 打开命令行
    • 使用gcc编译代码
    • 运行程序
      • 双击运行
      • 使用命令行运行
  • 代码分析
  • 编译过程

编写C文件

  编辑C代码文件的工具有很多,为了让大家初学的时候摆脱编译软件的干扰,更容易理解编译过程。本次我们使用记事本编辑,gcc编译第一个C代码文件。
  书上本章内容太过跳跃,我在此新加一个过渡章节,用于解析一个最简单的代码框架。

创建文本文件

  首先,创建一个文本文件,取个英文名字,我这里取名为==“main”==。
在这里插入图片描述
在这里插入图片描述

编写代码

  然后,双击打开文件,将以下内容敲进去(拷贝),然后保存文件

#include<stdio.h>
int main()
{
	printf("Hello World\n");
	getchar();
	return 0;
}

在这里插入图片描述

修改文件后缀

  右键选中文件,重命名文件,修改文件后缀txtc,弹出以下窗口,选择==“是”==。如果看不到后缀名,可询问度娘,不同系统修改方法略有差异,不过没有难度,按照步骤修改即可。
在这里插入图片描述

切换文件路径

  为了方便,首先将创建的main.c文件拷贝到一个干净的文件夹,这里我将main.c放在了一个新的文件夹E盘下的NEW文件夹。
在这里插入图片描述

编译代码

  为了演示编译的过程,本次编译代码使用的是MINGW中的gcc,如果没有安装的可以在网上找到教程,大家也可以使用VS Code安装教程中MinGW的安装过程来安装。
  只需要一下几步就可以。

  • 下载
  • 解压
  • 放到文件夹下
  • 在环境变量的path中,添加解压后的bin文件路径全称。
    在这里插入图片描述


在这里插入图片描述

打开命令行

  命令行打开的方法我推荐这一个,比较简单:
  打开上方的导航栏输入框,输入==“cmd”==,然后双击键盘的“Enter”键。
在这里插入图片描述
  双击键盘的“Enter”键后会打开一个命令行的黑窗口,此时窗口是当前文件夹的路径,我的是E盘的NEW文件夹。
在这里插入图片描述

使用gcc编译代码

  在黑窗口输入==“gcc main.c”==,然后点击回车(Enter)键。查看文件夹下多了一个文件,名称是“a.out”,这个文件图标是一个默认的应用图标。
在这里插入图片描述
在这里插入图片描述

运行程序

双击运行

  双击运行一下,会弹出一个黑窗口,显示了“Hello World”,然后在这个黑窗口按下键盘上的任意按键,窗口会显示运行结束信息,有的系统可能会一闪而过。
在这里插入图片描述

使用命令行运行

  在命令行输入程序名称a.exe,然后按下键盘的回车“Enter”,键盘,窗口也会显示出来字符。
在这里插入图片描述
  此时按下任意按键,程序退出。我输入的是字符A
在这里插入图片描述

代码分析

  现在已经运行了一个程序,有没有发现黑窗口显示的那句话是在main.c文件中写的内容呢,下面我们来介绍一个这几行代码;

#include<stdio.h>

  第一行的作用是导入一个名字叫“stdio.h”的文件,导入这个文件的原因是我们要用这个文件里的东西(函数)。其实这个导入也是很简单的操作,就是将“stdio.h”中的文件内容复制到我们的main.c里面来了。

int main()

  第二行是程序执行的入口。简单来说就是要执行函数,要一句一句的执行,执行的时候第一行代码是从main()执行的。执行完以后会返回一个int类型的元素,有关详细的内容会在函数章节讲。这里只需要记住main函数是C程序的入口。()也有讲究,如果你看过别人的代码会发现这里面有一些内容,这里我们先不介绍,也留到函数部分讲解。

{

}

  括号部分就是将代码括起来,告诉计算机,{}里面的内容是属于main函数的。

printf("Hello World\n");

  这一行的作用就是吧Hello World显示出来,printf就是我们第一行导入的stdio.h文件里的。\n是一个特殊字符,在这里的作用就是换行,;标志着这一句代码的结尾。

getchar();

  这一行也是我们第一行导入的stdio.h文件里的,在这里的作用是从键盘获取一个字符,如果不按按键就会一直在这个界面,这就是为什么要你们输入一个字符的意义。有的系统不加这一句,黑窗口就一闪而过了。;标志这一句的结尾

return 0

  这一行的作用是告诉计算机,main函数结束了,返回了一个数字0。;标志这一句的结尾。

编译过程

  上面的内容如果有点吃力是正常的,刚刚接触很多思维还没有发散,后面我们会将这里的每一个作用都详细的阐述,随着后面的学习会更理解这些内容的。
上面我们只一步gcc main.c就生成了可执行文件。其实计算机执行的时候执行了4个步骤,分别是:

  • 预处理
  • 编译
  • 汇编
  • 链接
    这四步的具体每一步做了什么将在下一篇文章讲解。看完之后试着把本节的代码自己编写运行一遍,也可以试着修改输出的内容,自己尝试运行看看,修改完文件以后一定要先用gcc编译重新生成文件,否则运行的文件还是旧的文件哦。
    尝试运行以下代码,看看有什么变化
#include<stdio.h>
int main()
{
	printf("Hello World\n");
	getchar();
	printf("Hello World\n");
	return 0;
}
#include<stdio.h>
int main()
{
	printf("Hello World");
	getchar();
	printf("Hello World\n");
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hql面试题之上海某资深数仓开发工程师面试题-求不连续月份的月平均值

1.题目 A,B两组产品的月平均值&#xff0c;月平均值是当月的前三个月值的一个平均值&#xff0c;注意月份是不连续的&#xff0c;如果当月的前面的月份不存在&#xff0c;则为0。如A组2023-04的月平均值为2023年1月的数据加2023-02月的数据的平均值&#xff0c;因为没有其他月…

MES管理系统在智能工厂建设中的五个核心作用

随着制造业的数字化转型&#xff0c;智能工厂已经成为了现代工业生产的标志。而在智能工厂中&#xff0c;MES生产管理系统扮演着至关重要的角色。MES管理系统是一种用于管理和监控生产过程的软件系统&#xff0c;通过集成生产计划、资源调度、设备控制、质量管理等功能&#xf…

Cytoscape学习教程

写在前面 今天分享的内容是自己遇到问题后,咨询社群里面的同学,帮忙解决的总结。 关于Cytoscape,对于做组学或生物信息学的同学基本是陌生的,可能有的同学用这个软件作图是非常溜的,做出来的网络图也是十分的好看,“可玩性”很高,就像前面分享的aPEAR包一样aPEAR包绘制…

Python自动化测试工具selenium使用指南

概述 selenium是网页应用中最流行的自动化测试工具&#xff0c;可以用来做自动化测试或者浏览器爬虫等。官网地址为&#xff1a;selenium。相对于另外一款web自动化测试工具QTP来说有如下优点&#xff1a; 免费开源轻量级&#xff0c;不同语言只需要一个体积很小的依赖包支持…

大杀四方,华为组建智能车大联盟 | 百能云芯

最近&#xff0c;华为和一系列汽车公司合资的新公司迎来新的进展。除了与长安汽车的合作外&#xff0c;据传华为已经邀请奇瑞、赛力斯、北汽以及江淮汽车入股新公司&#xff0c;这将使华为成为中国智能汽车平台的重要主导者。 根据澎湃新闻的报道&#xff0c;知情人透露&#x…

Mysql之子查询(知识点+例题)

Mysql之子查询<知识点例题> 什么是子查询案例分析案例分析子查询的分类单行子查询子查询中的空值问题题目练习题目一题目二题目三题目四题目五补充&#xff1a;聚合函数与GROUP BY的使用关系 CASE表达式&#xff08;子查询中的运用&#xff09;简单CASE表达式搜索CASE表达…

Python将Labelme的Json标注文件进行增、删、改、查

Python将Labelme的Json标注文件进行增、删、改、查 前言前提条件相关介绍实验环境Json标注文件的增、删、改、查增代码实现输出结果 删代码实现输出结果 改代码实现输出结果 查代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精…

ISCTF2023 部分wp

学一年了还在入门( web where_is_the_flag ISCTF{41631519-1c64-40f6-8dbb-27877a184e74} 圣杯战争 <?php // highlight_file(__FILE__); // error_reporting(0);class artifact{public $excalibuer;public $arrow;public function __toString(){echo "为Saber选择…

elementui的table合并列,三个一组

<el-table :span-method"objectSpanMethod" :cell-style"iCellStyle" :data"tableData" height"63vh" border style"width: 100%; margin-top: 6px"><el-table-column type"index" label"序号"…

【同一局域网下】访问其他电脑的虚拟机

一、在被连接的电脑上对VMware进行设置 编辑 --> 虚拟网络编辑器 按顺序点击 如果22端口已被占用&#xff0c;可以自行定义 &#xff08;端口号越大&#xff0c;被占用的可能性越小&#xff09; 二、在被连接的电脑上对防火墙进行设置&#xff08;这里以win11为例&#xff…

【C++笔记】红黑树的简易实现

【C笔记】红黑树的简易实现 一、什么是红黑树以及红黑树好在哪里1.1、什么是红黑树1.2、红黑树比AVL树好在哪里&#xff1f; 二、红黑树的模拟实现2.1、红黑树的插入2.2、仅变色调整2.3、变色单旋调整2.4、变色双旋调整 一、什么是红黑树以及红黑树好在哪里 1.1、什么是红黑树…

优化邮件群发效果的方法与策略

怎样优化邮件群发效果&#xff1f;这是许多企业在进行邮件营销时常常被问到的问题。邮件营销是一种高效且经济实惠的市场推广方式&#xff0c;但如何使邮件真正引起接收者的兴趣并产生预期的效果并不容易。好的营销效果可以带来高回报、高收益率&#xff0c;但是怎么提升群发效…

零代码连接钉钉宜搭与用友U8,让业财数据管理简单高效

零代码连接钉钉宜搭与用友U8&#xff0c;让业财数据管理简单高效 如果把企业内部的业务系统比作一条条河流&#xff0c;那么它们的交汇点就像江河湖海。在这些交汇点上&#xff0c;数据的汇集、分析和共享离不开系统之间的集成。 钉钉宜搭和用友U8是两个在企业中非常重要的系统…

端口隔离度

端口隔离度 隔离度为&#xff08;本振或射频信号&#xff09;泄漏到其他端口的功率与输入功率之比&#xff0c;单位是dB。 比如 RF to LO Isolation 表示 射频输入信号的功率 与 泄漏到LO端口的功率 之比。 而 LO to RF Isolation 则表示 本振输入信号的功率 与 泄漏到RF端口的…

mvn 编译时报错 java heap space

问题描述 使用IDEA进行war打包时&#xff0c;编译类都正常&#xff0c;但是最后生成 war 包时很慢&#xff0c;有些时候还会报错&#xff1a; java head space。具体错误如图&#xff1a; 问题诊断 换电脑&#xff0c;可行清理 .idea 目录重新打包还是不行升级 maven-war-plu…

Linux 基本语句_13_消息队列

概念&#xff1a; 不同进程能通过消息队列来进行通信&#xff0c;不同进程也能获取或发送特定类型的消息&#xff0c;即选择性的收发消息。 一般一个程序采取子进程发消息&#xff0c;父进程收消息的模式 常用函数功能&#xff1a; fork(); // 创建子进程 struct msgbuf{ …

操作系统(七)| 设备管理-- 端口 驱动程序 基本I/O控制 磁盘I/O

系列文章如下 学习过程中一定要有系统观念&#xff08;知识框架&#xff0c;每一章开头都会有一个思维导图&#xff09;&#xff0c;知道目前自己在学习的是哪一板块的内容&#xff0c;和前面有什么样的联系 操作系统的很多知识点前后都是联系非常紧密的&#xff0c;去一点一…

【Openstack Train安装】十、Neutron安装

Neutron&#xff0c;是Openstack中的一大核心组件&#xff0c;设计目标是实现“网络即服务&#xff08;Networking as a Service&#xff09;”。为了达到这一目标&#xff0c;在设计上遵循了基于 SDN 实现网络虚拟化的原则&#xff0c;在实现上充分利用了 Linux 系统上的各种网…

vs配置64位汇编

vs开发64位程序无法使用内联汇编&#xff0c;需要将汇编放到一个单独文件中编译链接。 步骤如下&#xff1a; 生成汇编代码。以asm.asm为例&#xff0c;以下是模板&#xff1a; ;64位汇编程序模板 (Template) ;声明一个ExitProcess函数 ExitProcess PROTO.data;在这里声明变量…

一文1000字彻底搞懂Web测试与App测试的区别

总结分享一些项目需要结合Web测试和App测试的工作经验给大家&#xff1a; 从功能测试区分&#xff0c;Web测试与App测试在测试用例设计和测试流程上没什么区别。 而两者的主要区别体现在如下几个方面&#xff1a; 1 系统结构方面 Web项目&#xff0c;B/S架构&#xff0c;基…