【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 还是将去年的目标完成了一些 【接纳不完美,多拍照片】 这个还是部分做到了,今年和一些朋友们见面时都注意拍照留记录了,不过还可以继续加强,因为外貌上发生了重大变化,下面细说…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
