最新要闻
- 世界热点评!豫能控股拟30亿布局新能源转型待考 煤炭涨价助推成本上升两年累亏逾40亿
- 头条:国内“老头乐一哥”!雷丁汽车申请破产:曾被经销商举报为诈骗
- 七彩虹发布新款隐星游戏本:RTX 4060首发5999元
- 【世界聚看点】百万级越野车!仰望U8申报信息公布:搭比亚迪最强2.0T发动机
- 全球聚焦:蔚来车主 绑架李斌?
- 比亚迪海豚最强对手来了!五菱宝骏云朵亮相:10万级大五座_热消息
- 今日视点:再动员再部署!龙湾全面推进这项工作!
- 中信证券:下半年全球新能源汽车及储能有望延续高增长
- AMD RDNA3甜点卡RX 7600到货了:价格不友好
- 热资讯!杭州女生地铁上隔空收到陌生信息 果粉热议常被此折磨:苹果回应给解决办法
- 你遇到没?苹果iPhone天气又崩了:用户吐槽不如安卓
- 爱犬跳车乱蹿 摩托车骑手高速路上抓狗:险象环生-视点
- 扫码才能点餐缴费?市消协劝喻商家:不得强制消费者关注公众号或用小程序_当前视讯
- 环球观察:韩国最新民调:尹锡悦就职一周年,施政差评率60%
- iOS 16.5 RC准正式版推送!iOS 16系统更新要绝唱了 每日速讯
- 华为Mate X3国际版亮相:系统是EMUI 13.1
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
高效c语言1快速入门|焦点热闻
本章将开发你的第一个C语言程序:传统的 "Hello, world!"程序。然后讨论一些编辑器和编译器的选项,并阐述移植性问题。
(相关资料图)
Hello, world!
#include #include int main(void) {puts("Hello, world!");return EXIT_SUCCESS;}
在Linux和其他类似Unix的操作系统上,你可以用cc命令调用系统编译器:
$cc hello.c$lsa.out hello.c$./a.outHello, world!% cc -o hello hello.c% ./helloHello, world!
cc命令有许多标志和编译器选项。例如,-o文件标志让你给可执行文件起名字,而不是a.out。
hello.c程序的前两行使用了#include预处理器指令,它的行为就像你在完全相同的位置用指定文件的内容替换它一样。我们包括
C定义了两种可能的执行环境:独立的和托管的。独立环境可能不提供操作系统,通常用于嵌入式编程。这些执行环境提供了一套最小的库函数,程序启动时调用的函数的名称和类型是执行环境定义的。
我们定义main返回int类型的值,并将void放在括号内,表示该函数不接受参数。int类型是有符号的整数类型,可以用来表示正、负整数值以及零。与其他程序性语言类似,C语言程序由可以接受参数和返回值的过程(称为函数)组成。每个函数都可重用,你可以根据需要在程序中频繁调用。在本例中,主函数返回的值表示程序是否成功终止。
puts("Hello, world!")打印出"Hello, world!"。 puts函数是标准库函数,它将字符串参数写入stdout(通常代表控制台或终端窗口),并在输出中附加换行符。如果不需要换行可以使用fputs。
return语句退出程序,向主机环境或调用脚本返回一个整数值。EXIT_SUCCESS是类似对象的宏,通常扩展为0,通常定义为:#define EXIT_SUCCESS 0。
检查函数的返回值
函数通常会返回一个计算结果的值,或者表示函数是否成功完成了它的任务。例如,我们在 "Hello, world!"程序中使用的puts函数需要打印字符串并返回int类型的值。如果发生写入错误,puts函数返回宏EOF的值(负整数);否则,它返回非负的整数值。
尽管对于我们的简单程序来说,puts函数不太可能失败并返回EOF,但这是可能的。因为对puts的调用可能会失败并返回EOF,这意味着你的第一个C程序有bug,或者,可以按以下方法改进。
#include #include int main(void) { if (puts("Hello, world!") == EOF) { return EXIT_FAILURE; // code here never executes } return EXIT_SUCCESS; // code here never executes}
注意(puts("Hello, world!")一定要有括号,否则编译会报错:
c$ cc hello2.chello2.c: In function ‘main’:hello2.c:5:5: error: expected ‘(’ before ‘puts’5 | if puts("Hello, world!") == EOF {| ^~~~| (
格式化的输出
puts函数是一种将字符串写入stdout的简单好方法,但最终你会需要使用printf函数来打印格式化的输出--例如,打印字符串以外的参数。printf函数接收定义输出格式的格式化字符串,然后是可变数量的参数,这些参数是你想打印的实际数值。例如,如果你想用printf函数来打印Hello, world!,你可以这样写。printf("%s\n", "Hello, world!")。
第一个参数是格式字符串"%s\n"。%s是转换规范,指示printf函数读取第二个参数(字符串字面)并将其打印到stdout。\n是一个字母转义序列,用于表示非图形字符,并告诉函数在该字符串后面包括新行。
注意不要将用户提供的数据作为第一个参数的一部分传递给printf函数,因为这样做会导致格式化输出的安全漏洞(Seacord 2013)。
编辑器和集成开发环境
可以使用各种编辑器和集成开发环境来开发你的C语言程序。图1-1显示了最常用的编辑器,根据2018年JetBrains的调查。
对于Microsoft Windows,Microsoft的Visual Studio IDE(https://visualstudio.microsoft.com/)是不错的选择。Visual Studio有三个版本。社区版、专业版和企业版。社区版的优点是免费,而其他版本的功能则需要付费。
对于Linux来说,Vim、Emacs、Visual Studio Code和Eclipse都可选择。Vim是许多开发者和高级用户的首选编辑器。它是一个基于vi编辑器的文本编辑器,由Bill Joy在1970年代为Unix的一个版本编写。它继承了vi的按键绑定,但也增加了原vi所缺少的功能和可扩展性。你可以选择安装Vim插件,如YouCompleteMe(https://github.com/Valloric/YouCompleteMe/)或deoplete(https://github.com/Shougo/deoplete.nvim/),为C语言编程提供本地语义完成。
GNU Emacs是可扩展的、可定制的、免费的文本编辑器。它的核心是Emacs Lisp的解释器,这是一种Lisp编程语言的方言,具有支持文本编辑的扩展功能--尽管我从未发现这是个问题。
Visual Studio Code(VS Code)是精简的代码编辑器,支持开发操作,如调试、任务运行和版本控制。它提供了开发人员所需的工具,以实现快速的代码构建--调试循环。VS Code可以在macOS、Linux和Windows上运行,对私人或商业使用都是免费的。
编译器
现在有很多C语言编译器,他么编译器实现了不同版本的C标准。许多用于嵌入式系统的编译器只支持C89/C90。用于Linux和Windows的流行编译器更努力地支持现代版本的C标准,直到并包括对C2x的支持。
- GNU 编译器集GNU编译器集合(GCC)包括C、C++和Objective-C以及其他语言的前台(https://gcc.gnu.org/)。GCC的开发在GCC指导委员会的指导下遵循明确的开发计划。
GCC已经被采纳为Linux系统的标准编译器,尽管也有用于微软Windows、macOS和其他平台的版本。在Linux上安装GCC很容易。例如,下面的命令在Ubuntu上安装GCC 8。
$ sudo apt-get install gcc-9$ gcc --versiongcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0Copyright (C) 2019 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.$ sudo dnf install gcc # Fedora
- Clang另一个流行的编译器是Clang(https://clang.llvm.org/)。在Linux上安装Clang也很容易。例如,下面的命令应该在Ubuntu上安装Clang。
$ sudo apt-get install clang你可以用下面的命令测试你所使用的Clang的版本。% clang --version$ clang --versionclang version 10.0.0-4ubuntu1Target: x86_64-pc-linux-gnuThread model: posixInstalledDir: /usr/bin
- 微软Visual Studio
Windows最流行的开发环境是Microsoft Visual Studio,它包括IDE和编译器。它与Visual C++ 2019捆绑在一起,其中包括C和C++编译器。你可以在项目属性页上为Visual Studio设置选项。在C/C++下的高级选项卡上,确保你通过使用编译为C代码(/TC)选项而不是编译为C++代码(/TP)选项来编译为C代码。默认情况下,当你命名一个以.c为扩展名的文件时,它是用/TC编译的。如果文件被命名为.cpp、.cxx或其他一些扩展名,则用/TP编译。
参考资料
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- 本书英文原版: Effective C An Introduction to Professional C Programming 2020 a4.5-103--.epub
https://url97.ctfile.com/f/18113597-810419181-1f9306 下载密码 订阅号pythontesting 发送 密码 。
移植性
每个C语言编译器的实现都至少有一点不同。编译器不断发展,因此,例如,像GCC这样的编译器可能提供对C17的完全支持,但正在努力实现对C2x的支持,在这种情况下,它可能有一些C2x的功能实现,但没有其他。因此,编译器支持全部的C标准版本(包括中间的版本)。C语言实现的总体发展是缓慢的,许多编译器明显落后于C标准。
如果为C语言编写的程序只使用标准中规定的语言和库的那些功能,就可以认为是严格符合标准的。这些程序的目的是为了最大限度地提高可移植性。然而,由于实现行为的范围,现实世界中没有一个C语言程序是严格符合要求的,也不会是(可能也不应该是)。相反,C标准允许你编写符合要求的程序,这些程序可能依赖于非可移植的语言和库特性。
通常的做法是为一个参考实现编写代码,或者有时为几个实现编写代码,这取决于你打算在哪个平台上部署你的代码。C标准是确保这些实现不会有太大的差异,并允许你一次针对几个实现,而不必每次都学习一种新的语言。在C标准文件的附件J中列举了五种可移植性问题。
实现定义的行为
未指定的行为
未定义的行为
针对本地的行为
常见的扩展
实现定义的行为实现定义的行为是指C语言标准中没有规定的程序行为,它可能在不同的实现中提供不同的结果,但在一个实现中具有一致的、有记录的行为。实现定义的行为的一个例子是一个字节中的位数。
实现定义的行为大多是无害的,但在移植到不同的实现时可能会导致缺陷。在可能的情况下,避免编写依赖于实现定义的行为的代码,这些行为在你可能用来编译你的代码的C实现中是不同的。C标准的附件J.3中列举了实现定义行为的完整列表。你可以通过使用static_assert声明来记录你对这些实现定义的行为的依赖。
- 未指定的行为
未指定的行为是指标准提供了两个或多个选项的程序行为。该标准对在任何情况下选择哪个选项没有要求。每次执行一个给定的表达式可能会有不同的结果,或者产生与之前执行相同表达式不同的值。未指定行为的一个例子是函数参数存储布局,它在同一程序中的不同函数调用中可能会有所不同。避免编写依赖于C标准附件J.1中列举的非指定行为的代码。
未定义的行为未定义的行为是指C标准没有定义的行为,或者说是 "在使用不可移植的或错误的程序结构或错误的数据时,标准没有规定的行为"。未定义行为的例子包括有符号的整数溢出和解读一个无效的指针值。具有未定义行为的代码往往是错误的,但比这更有细微差别。标准中对未定义行为的识别如下。
当违反了 "应当 "或 "不应当 "的要求,并且该要求出现在约束条件之外时,该行为是未定义的
当行为被明确规定为 "未定义行为 "时
通过省略任何明确的行为定义前两种未定义行为经常被称为显式未定义行为,而第三种则被称为隐式未定义行为。这三者之间的重点没有区别,它们都描述了未定义的行为。C语言标准附件J.2 "未定义行为 "包含了C语言中显式未定义行为的列表。
开发者经常误认为未定义的行为是C标准中的错误或遗漏,但将行为归为未定义的决定是有意的,也是经过考虑的。C标准委员会将行为归类为未定义的行为是为了做到以下几点。
- 给予实现者许可,使其不去捕捉难以诊断的程序错误
- 避免定义晦涩难懂的案例,使之有利于一种实现策略而不是另一种策略
- 识别可能的符合要求的语言扩展领域,在这些领域中,实现者可以通过提供官方未定义行为的定义来增强语言。这三个原因实际上是完全不同的,但都被认为是可移植性问题。编译器(实现)有做以下事情的余地。
- 完全忽略未定义的行为,产生不可预测的结果
- 以环境特征的文件方式行事(有或没有发出诊断书)。
- 终止翻译或执行(发出诊断)。
这些选项都不是很好(尤其是第一个),所以最好避免未定义的行为,除非实现指定这些行为的定义是为了让你调用一个语言增强功能。
- 特定于本地的行为和通用扩展
特定于本地的行为取决于每个实现所记录的国籍、文化和语言的本地惯例。通用扩展在许多系统中被广泛使用,但并不能移植到所有的实现中。
小结
在这章中,你学会了如何编写简单的C语言程序,编译它,并运行它。然后,我们看了几个编辑器和交互式开发环境,以及一些编译器,你可以用它们来开发Windows、Linux和macOS系统上的C语言程序。一般来说,你应该使用较新版本的编译器和其他工具,因为它们往往支持C编程语言的较新功能,并提供更好的诊断和优化。如果较新版本的编译器破坏了你现有的代码,或者你正准备部署你的代码,你可能不想使用较新版本的编译器,以避免在你已经测试过的应用程序中引入不必要的变化。在本章的最后,我们讨论了C语言程序的可移植性。
关键词:
-
Echarts引入——绘制一个简单的图表|环球信息
获取EChartsNPM安装EChartsnpminstallecharts--save引入EChartsimport*asechartsfrom& 39;echarts& 39;;
来源: -
世界热点评!豫能控股拟30亿布局新能源转型待考 煤炭涨价助推成本上升两年累亏逾40亿
河南发电企业豫能控股(001896 SZ)继续推进产业转型。 5月8日晚间,豫能控股披露,公司拟建设风火储能
来源: 高效c语言1快速入门|焦点热闻
使用IDEA远程Debug调试(详细)|今日快讯
Echarts引入——绘制一个简单的图表|环球信息
世界热点评!豫能控股拟30亿布局新能源转型待考 煤炭涨价助推成本上升两年累亏逾40亿
头条:国内“老头乐一哥”!雷丁汽车申请破产:曾被经销商举报为诈骗
七彩虹发布新款隐星游戏本:RTX 4060首发5999元
【世界聚看点】百万级越野车!仰望U8申报信息公布:搭比亚迪最强2.0T发动机
全球聚焦:蔚来车主 绑架李斌?
比亚迪海豚最强对手来了!五菱宝骏云朵亮相:10万级大五座_热消息
今日视点:再动员再部署!龙湾全面推进这项工作!
VM虚拟机去虚拟化 玩游戏多开 过检测 tp vmp cf dnf
中信证券:下半年全球新能源汽车及储能有望延续高增长
AMD RDNA3甜点卡RX 7600到货了:价格不友好
热资讯!杭州女生地铁上隔空收到陌生信息 果粉热议常被此折磨:苹果回应给解决办法
你遇到没?苹果iPhone天气又崩了:用户吐槽不如安卓
爱犬跳车乱蹿 摩托车骑手高速路上抓狗:险象环生-视点
扫码才能点餐缴费?市消协劝喻商家:不得强制消费者关注公众号或用小程序_当前视讯
聚焦重点靶向发力 万亿税费红利加快释放 全球热文
环球观察:韩国最新民调:尹锡悦就职一周年,施政差评率60%
iOS 16.5 RC准正式版推送!iOS 16系统更新要绝唱了 每日速讯
华为Mate X3国际版亮相:系统是EMUI 13.1
学系统集成项目管理工程师(中项)系列19b_成本管理(下)_世界看点
新坎特伯利传说_关于新坎特伯利传说简介
捡漏上瘾!印度仍在抢购廉价俄油 全球油价将大涨价 环球关注
网友第一次装机遇到这些问题:好像当年的自己_每日热议
即时:滴滴一面:BigKey问题很致命,如何排查和处理?
“下沉式旅游”的信号,小城市接收到了吗? 焦点简讯
天天短讯!微信5个超实用隐藏功能 很多人都不会用!看完涨知识
最强高端旗舰手表 华为WATCH 4系列全球首发亮相:腕上健康管家
全球焦点!开发者称《王国之泪》主题是"手":让林克更具辨识度
代工厂搞出“雷军电动车”的老头乐一哥 死了:因为想好好做车
4.1Pb/s!中国创造光纤传输新纪录 世界观点
“基金公司”APP上买理财,血本无归?法院判了
欧冠半决赛晋级率:本菲卡居首,米兰、利物浦、尤文列前四|全球看点
指标到校和统招的区别_指标到校与统招的区别
谁抢到了五月天门票?网友吐槽:黄牛加价可随便买 最新资讯
国产SSD继续卷:梵想S690 2TB到手价499元 4800MB/s
拍照机皇再次易主 华为P60 Pro拿下DXO手机影像全球第一:156分-全球看点
美国布法罗枪击案一周年之际专家发声:消除种族歧视收效甚微 问题由来已久
操作系统作业常见算法-个人复习用
Spring AOP官方文档学习笔记(四)之Spring AOP的其他知识点 快播
当前视讯!打破苹果垄断,华为、小米携手共进,夺回国产手机高端份额!
环球观焦点:在华停产新车 日系汽车巨头三菱退出中国?回应来了:没有计划
抄袭风波后 吉利、长安宣布战略合作:共推中国汽车产业升级_天天快报
让平板再次伟大 苹果生产力软件FinalCut Pro、Logic Pro支持iPad电脑
看热讯:C#设计模式09——组合模式的写法
R数据分析:生存数据预测模型的建立和评价(二)timeROC与决策曲线
汽车大灯清洗功能有用吗_汽车大灯清洗功能什么作用
诺贝尔经济学奖得主称美国可能债务违约
每日关注!韩系车中国市场遇冷!悦达起亚被曝管理岗轮休 一休就一年
理想L8成中保研碰撞史最佳SUV:“堡垒车身”功不可没_世界速递
TCL发布Mini LED电视Q10H:疯狂3000尼特亮度 98寸售价29999元
贵南县气象台发布暴雪蓝色预警信号【2023-05-09】|天天观察
Linux 处理CPU和内存参数的方式总结
越南央行可能会在银行挤兑现象中尽早采取行动。
播报:机械盘真的没人买了 HDD出货量再次暴跌:价格神奇上涨
SSD价格见底了!再下降后果危险:闪存厂商要破产 世界热讯
环球观天下!海洋气息渐浓 新款比亚迪宋PLUS DM-i申报: 装上海豹同款大灯
真的在做了!任天堂官方回应新一代Switch消息:细节无可奉告_全球新要闻
首发4999元 KTC新款电竞显示器上架:2K OLED高刷屏 四轴调色|每日热讯
【开源游戏】Legends-Of-Heroes 基于ET 7.2的双端C#(.net7 + Unity3d)多人在线英雄联盟风格的球球大作战游戏。|全球简讯
世界快看:数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)
全球今日讯!祥鑫科技:5月8日接受机构调研,信达证券、华安基金等多家机构参与
天天日报丨谷爱凌:90%网络传言都是假的 不会为负面评价难过
午睡过久会长胖吗?研究发现:午睡时长影响健康 30分钟是关键点-全球最新
曾被称为格力接班人!格力直播间孟羽童视频被删除 天天动态
淄博90后女店主2个月瘦了10斤:1天烤鸡腿上千个 世界快讯
天天热点评!苹果在iPhone 14上挤牙膏!果粉立马用脚投票:好评率跌了
前法鹰主管:当年签镰田大地时他还很年轻,但能力让我想到齐达内
华为云数据库首席专家谈分布式数据应用挑战和发展建议 天天报资讯
如何完整地掌握一个机器学习模型 世界观点
数据结构与算法大作业:走迷宫程序(实验报告)_快资讯
Ubuntu20
你还在纠结怎么选IDE吗?常用IDE工具分享|环球观热点
赛轮轮胎:公司开具的电子商业承兑汇票均已结清|世界速看料
00后男生取名江胡传奇:妈妈姓胡 爸爸喜欢玩《传奇》 每日速读
取代安卓14!OpenHarmony 4.0即将公测:华为鸿蒙4.0“母系统”
世界看点:任天堂开始乱杀!看《塞尔达传说:王国之泪》合法游戏画面也被封
京东APP大升级!12.0上线:应简尽简 营销和弹窗少了_最资讯
1799元 九号平衡车L8奥特曼定制版明日首销:隔壁小孩羡慕哭了
当前速看:金华市东苑小学新生入学网上模拟报名详情2023
SaaS化开源项目之HouseKeeper云上部署实践_每日动态
加要求中方一领事官员离境_中方反制|今日讯
世界视讯!今日欧元/美元汇率行情预测(2023年5月9日)
造车新势力转守为攻!小鹏汽车法务部上线:网络不是法外之地
公司无双休求职者礼貌回拒 HR:想躺平就回老家种地
每日视点!朝日台资深员工游戏氪金过度 年薪1500万仍盗窃公司电脑倒卖
环球今日讯!景区回应功德箱贴收款码:考虑到年轻人很少带现金 与时俱进
乘联会:特斯拉涨价是很好的信号!避免消费者过度期待降价_世界视点
世界快报:广东五华县政府控制的屋顶光伏资源特许经营项目开工
js中的变量 环球速看
JSP_5.8_课堂笔记|世界视点
由浅入深学MySQL之事务全攻略|天天微资讯
微头条丨今天看到博客园的捐款求助,园龄17年6个月的我有些感慨
运营商三要素验证原理,这篇文章就够了!
对话上海国企 | 因科而起、由科而兴、科有所为,上海建科赋能城乡建设新服务
阿坝县气象台发布雷电黄色预警信号【III级/较重】【2023-05-09】 热消息
90元大额券:雪中飞高端含桑蚕丝商务POLO衫49元到手_世界今热点
世界热消息:电脑不怕丢了?鲁大师推出电脑防盗助手:支持定位、丢失锁机
当前报道:中文通用大模型评测基准SuperCLUE发布:讯飞星火认知大模型国内第一 文心一言垫底