【C语言基础】编译并运行第一个C程序
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
博客内容主要围绕:
5G/6G协议讲解
高级C语言讲解
Rust语言讲解
文章目录
- 编译并运行第一个C程序
- 一、编译上面的程序
- 二、运行上面的程序
- 三、如何理解上面的程序
- 四、显示变量的值
- 五、注释
编译并运行第一个C程序
这篇博客中,我将介绍C语言编程的全部内容,主要覆盖以下C语言的内容,包括:
- 编写您的第一个程序;
- 修改您的程序以改变其输出;
- 理解main()函数;
- 使用printf()函数输出信息;
- 添加注释提高程序的可读性
这篇博客主要会使用下面的示例进行讲解:
#include <stdio.h> int main (void)
{ printf ("Programming is fun.\n"); return 0;
}
在C语言中,小写字母和大写字母是不同的。此外,在C语言中,从一行中的哪个位置开始输入是无关紧要的,也就是说您可以在该行的任何位置开始输入语句。利用这一点,你可以开发出更易于阅读的程序。制表符(Tab键)经常被程序员用作一种方便的缩进方式。
一、编译上面的程序
上面的C语言程序,首先需要将它输入到一个文件中。您可以使用任何文本编辑器来完成上面的任务。Unix用户通常使用vi
或emacs
等编辑器。C语言编译器能够识别以字符.c
结尾的文件名作为C语言程序。假设您将上述程序输入到一个名为 prog1.c 的文件中。接下来,您需要编译这个程序。使用GNU C
编译器,只需简单地在终端中输入gcc命令和上述文件名,如下所示:
$ gcc prog1.c
$
如果您使用的是标准的Unix C编译器,则使用的命令是cc而不是gcc。在这里,输入的文本以粗体显示。如果从命令行编译C语言程序,则美元符号是命令提示符。在你的终端中实际的命令提示符可能不是美元符号。如果在你的程序中有任何输入错误,在输入 gcc 命令后编译器会列出这些错误,通常编译器会指出程序中这些错误所在的行号。相反,如果出现了另一个命令提示符(如上例所示),则表示程序中没有发现错误。当编译器编译并链接您的程序时,它会创建一个可执行版本的程序。当使用GNU或标准C语言编译器时,这个程序默认被命名为a.out
;而在Windows下,它通常被命名为a.exe
。
二、运行上面的程序
现在可以通过在命令行中输入可执行文件的名字来运行它:
$ a.out
Programming is fun.
$
如果出现如下错误提示“a.out: No such file or directory”,则可能意味着当前目录不在您的PATH中。 您可以将其添加到PATH或在命令提示符处键入内容“./a.out”
您也可以在程序编译时为可执行文件指定一个不同的名称。这可以通过使用-o
(字母O)选项,并在后面添加可执行文件的名称来实现。例如:
$ gcc prog1.c –o prog1
上面的命令行会编译 prog1.c 程序,并将可执行文件输入到文件 prog1 中,随后只需指定其名称即可执行:
$ prog1
Programming is fun.
$
三、如何理解上面的程序
程序的第一行 #include <stdio.h> 应该写在每个程序的起始行,它告诉编译器有关稍后在程序中使用的 printf()
输出函数的信息。
程序中下一行代码 int main (void) 告诉系统,程序的名称是 main(),它返回一个整数,缩写为“int”。main()是一个特殊的名称,明确指出了程序从哪里开始执行。紧跟在main()后面的左括号和右括号指明main()是一个函数的名称。括在圆括号中的关键字 void 表示函数main()没有参数。既然现在系统已经确定了main(),那么就可以进一步说明这个函数要执行的操作了。这是通过将函数的所有程序语句放在一对大括号内来实现的。包含在大括号内的所有程序语句都被系统视为main()函数的一部分。在上面的程序中,只有两条这样的语句。这条语句明确说明要调用一个名为 printf()
的函数。传递给 printf() 函数的参数是字符串 “Programming is fun.\n” 。
printf()
函数是C语言标准库中的一个函数,它只是在屏幕上打印或显示它的参数。字符串中的最后两个字符,即反斜杠(\)和字母n,合在一起统称为换行(newline)符。顾名思义,换行符就是告诉系统进行换行。在换行符之后打印的所有字符都会出现在显示器的下一行。实际上,换行符在概念上类似于打字机上的回车键。
C语言中的所有程序语句都必须以英文分号(;)结束。这就是为什么printf()调用的右括号后面紧跟着分号的原因。
语句 return 0; 是main()函数中的最后一条语句,它表示已经完成main()的执行,并将状态值0返回给系统。这里可以使用任何整数。按照惯例,0表示程序成功地完成了,即没有遇到任何错误。可以使用不同的数字来表示发生的不同类型的错误(例如找不到文件)。其它程序(例如Unix shell)可以测试这个退出状态,看看程序是否成功运行。
现在您已经完成了对第一个程序的分析,您可以修改它以显示短语 And programming in C even more fun。这可以通过再添加一条对printf()函数的调用来实现,例如下面的程序:
#include <stdio.h> int main (void)
{ printf ("Programming is fun.\n"); printf ("And programming in C is even more fun.\n"); return 0;
}
四、显示变量的值
下面程序的第一个C程序语句将变量sum声明为整数类型。C语言要求所有的程序变量必须在声明之后才能在程序中使用。变量的声明告诉C编译器,程序将如何使用一个特定的变量。编译器需要这些信息来生成正确的指令,以便在变量中存取值。声明为 int
类型的变量只能用于保存整型值,也就是说,没有小数点的值。整数值的例子有3、5、−20和0。带有小数位的数被称为浮点数,例如3.14、2.455和27.0都是浮点数。
#include <stdio.h> int main (void)
{ int sum; sum = 50 + 25; printf ("The sum of 50 and 25 is %i\n", sum); return 0;
}
声明变量sum之后的语句是 sum = 50 + 25;,这条程序语句读起来和它在其它大多数编程语言表示的含义一样,将数字50与数字25相加,并将结果通过赋值运算符,即等号(=)存储在变量sum中。
现在上面程序中的printf()函数在括号中增加了两个参数。这些参数用逗号分隔。printf()函数的第一个参数总是要显示的字符串。不过,除了显示字符串之外,你可能还经常希望显示某些程序变量的值。在这个例子中,你希望将变量 sum 的值显示在字符 “The sum of 50 and 25 is” 之后。printf()函数的第一个参数中的百分号字符(%)是printf()函数可以识别的特殊字符。紧跟在百分号后面的字符指定了在该点显示什么类型的值。在前面的程序中,printf()函数认为字母 i 表示要显示一个整数值。只要printf()函数在字符串中找到 %i 字符,它就自动显示printf()函数的下一个参数的值。因为sum是printf()的下一个参数,所以它的值会自动显示在字符串 “the sum of 50 and 25 is ” 之后。下面再来看一个显示多个变量的值的程序:
#include <stdio.h> int main (void)
{ int value1, value2, sum; value1 = 50; value2 = 25; sum = value1 + value2; printf ("The sum of %i and %i is %i\n", value1, value2, sum); return 0;
}
五、注释
程序中用注释语句来注解一个程序,以提高程序的可读性。正如下面的示例中看到的,注释的作用是告诉程序的读者(程序员或负责维护程序的其他人),当程序员在编写某一特定程序或特定语句序列时他是如何想的。
/* This program adds two integer values
and displays the results */ #include <stdio.h> int main (void)
{ // Declare variables int value1, value2, sum; // Assign values and calculate their sum value1 = 50; value2 = 25; sum = value1 + value2; // Display the result printf ("The sum of %i and %i is %i\n", value1, value2, sum); return 0;
}
在C语言程序有有两种方法来插入注释:
- 第一种注释可以由两个字符 / 和 * 发起。这标志着注释的开始。这种类型的注释必须明确终止。要终止这种注释,需要在注释的结尾使用字符 * 和 /,且不能在 * 和 / 之间嵌入任何空格。包含在开始的 /* 和结束的 */ 之间的所有字符都被视为注释语句的一部分,C语言编译器会忽略这些字符。当注释在程序中跨越多行时,通常使用这种形式的注释;
- 第二种向程序中添加注释的方式是使用两个连续的斜线字符 //。从这两个斜线到该行结尾的所有字符都会被编译器忽略。
在程序中恰当地使用注释语句再怎么强调也不为过。很多时候,一个程序员回看他6个月前编写的程序,却沮丧地发现,他可能一辈子都记不起某个特定函数或一组特定语句的目的。在程序的特定位置插入一个简单的注释语句,也许会节省大量时间,而不必再浪费时间去重新思考函数或语句集的逻辑。
养成在编写或键入程序时插入注释语句的习惯,这是一个很不错的主意。这里有很多理由。首先,在你还记忆犹新的时候为程序添加注释,要比在程序完成后再回头重新思考逻辑来添加注释要容易得多。其次,通过在开发的早期阶段向程序中插入注释,在调试阶当程序的逻辑错误被隔离和调试时,您也可以从这些注释中受益,此时。注释不仅可以帮助您通读程序,还可以帮助您指出逻辑错误的来源。最后一个理由是,我还没有发现任何一个程序员是真正喜欢为程序添加注释的。事实上,在调试完程序后,你可能不会喜欢回到程序中插入注释。在开发程序时插入注释,可以让这个有时很乏味的任务变得更容易忍受一些。
相关文章:

【C语言基础】编译并运行第一个C程序
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 编译并运行第一个C程序一、编译上面的程序二、运行上面的程序…...
处理 .gitignore 未忽略文件夹问题
本地删除缓存 例如 .idea 文件夹被其他同事误提交,那么他本地执行以下代码 git rm -r --cached .idea对应本地再提交即可...

php-phar打包避坑指南2025
有很多php脚本工具都是打包成phar形式,使用起来就很方便,那么如何自己做一个呢?也找了很多文档,也遇到很多坑,这里就来总结一下 phar安装 现在直接装yum php-cli包就有phar文件,很方便 可通过phar help查看…...

卡特兰数学习
1,概念 卡特兰数(英语:Catalan number),又称卡塔兰数,明安图数。是组合数学中一种常出现于各种计数问题中的数列。它在不同的计数问题中频繁出现。 2,公式 卡特兰数的递推公式为:f(…...
第05章 10 地形梯度场模拟显示
在 VTK(Visualization Toolkit)中,可以通过计算地形数据的梯度场,并用箭头或线条来表示梯度方向和大小,从而模拟显示地形梯度场。以下是一个示例代码,展示了如何使用 VTK 和 C 来计算和显示地形数据的梯度场…...
2023CISCN初赛unzip
2023CISCN初赛unzip 随便上传一个文件,会自动跳转到uplaod.php目录下,源码如下: <?php error_reporting(0); highlight_file(__FILE__);$finfo finfo_open(FILEINFO_MIME_TYPE); if (finfo_file($finfo, $_FILES["file"]["tmp_name…...

计算机网络 (55)流失存储音频/视频
一、定义与特点 定义:流式存储音频/视频是指经过压缩并存储在服务器上的多媒体文件,客户端可以通过互联网边下载边播放这些文件,也称为音频/视频点播。 特点: 边下载边播放:用户无需等待整个文件下载完成即可开始播放…...

Linux通过docker部署京东矩阵容器服务
获取激活码 将京东无线宝app升级到最新版,然后打开首页,点击号 选择添加容器矩阵,然后获取激活码 运行容器 read -p "请输入你的激活码: " ACTIVECODE;read -p "请输入宿主机的缓存路径: " src;docker rm -f cmatrix;docker run -d -it --name cmatrix …...
【MySQL】悲观锁和乐观锁的原理和应用场景
悲观锁和乐观锁,并不是 MySQL 或者数据库中独有的概念,而是并发编程的基本概念。 主要区别在于,操作共享数据时,“悲观锁”认为数据出现冲突的可能性更大,而“乐观锁”则是认为大部分情况不会出现冲突,进而…...

Java Web-Tomcat Servlet
Web服务器-Tomcat Web服务器简介 Web 服务器是一种软件程序,它主要用于在网络上接收和处理客户端(如浏览器)发送的 HTTP 请求,并返回相应的网页内容或数据。以下是关于 Web 服务器的详细介绍: 功能 接收请求&#…...

老牌工具被破!
屏幕录制技术因其高效的信息传递能力在多个行业中得到了广泛应用,在教育领域,教师利用屏幕录制制作在线课程。在企业培训中,它为新员工提供了灵活的学习方式。在直播、游戏时,录制分享精彩内容。在客户支持中,客服人员…...
在计算机上本地运行 Deepseek R1
Download Ollama on Linux Download Ollama on Windows Download Ollama on macOS Deepseek R1 是一个强大的人工智能模型,在科技界掀起了波澜。它是一个开源语言模型,可以与 GPT-4 等大玩家展开竞争。但更重要的是,与其他一些模型不同&…...
MongoDB中常用的几种高可用技术方案及优缺点
MongoDB 的高可用性方案主要依赖于其内置的 副本集 (Replica Set) 和 Sharding 机制。下面是一些常见的高可用性技术方案: 1. 副本集 (Replica Set) 副本集是 MongoDB 提供的主要高可用性解决方案,确保数据在多个节点之间的冗余存储和自动故障恢复。副…...

【GoLang】利用validator包实现服务端参数校验时自定义错误信息
在C/S架构下,服务端在校验请求参数时,若出现参数错误,要响应给客户端一个错误消息,通常我们会统一响应“参数错误”。 但是,如果只是一味的提示参数错误,我并不知道具体是哪个参数错了呀!能不能…...

异或哈希总结
例题 例题1https://codeforces.com/problemset/problem/1175/Fhttps://codeforces.com/problemset/problem/1175/F 例题2https://codeforces.com/contest/2014/problem/Hhttps://codeforces.com/contest/2014/problem/H例题4https://codeforces.com/contest/1418/problem/Ght…...

【Rust自学】15.7. 循环引用导致内存泄漏
说句题外话,这篇文章真心很难,有看不懂可以在评论区问,我会尽快作答的。 喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω…...
C#AWS signatureV4对接Amazon接口
马上要放假了,需要抓紧时间测试对接一个三方接口,对方是使用Amazon服务的,国内不多见,能查的资(代)料(码),时间紧比较紧,也没有时间去啃Amazon的文档,主要我的英文水平也不行,于是粗…...

C语言操作符(下)
上一篇文章传送门:操作符上 前言:上期我们介绍了C语言的操作符的使用方法,这期我们主要侧重讲当我们已经了解了操作符的基本知识后怎样样来看待运算路径的问题。 操作符 一,优先级和结合性1,优先级2,结合性…...
学习资料收藏 游戏开发
本文整理了本人在学习 Unity3D 游戏开发过程中知晓的一些学习资料。 视频教程 siki学院 M_Studio Unity中文课堂 博客 林新发 浅墨_毛星云 冯乐乐 Roystan Sorumi 宣雨松 陆泽西 书籍 《Unity 游戏设计与实现》(加藤政树) 《Unity Shader 入…...
我的2024年总结
趁着摸鱼赶紧写一下吧 去年目标review 还是将去年的目标完成了一些 【接纳不完美,多拍照片】 这个还是部分做到了,今年和一些朋友们见面时都注意拍照留记录了,不过还可以继续加强,因为外貌上发生了重大变化,下面细说…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...