这个专栏是优质的C++教程专栏,会保持更新哦
本专栏一致使用操作系统:macOS Ventura,代码编辑器:CLion,C++编译器:Clang
感谢一路相伴的朋友们,感谢你们的支持 ^ _ ^
当然,C++是一门具有可移植性的语言,意味着用Linux和Windows的小伙伴也可以看这篇文章入坑C++了
博主反馈非常及时,如果你在阅读的时候遇到问题,可以直接在评论区提问,博主看到后会在24小时内给你反馈
C++教程 - How to C++系列专栏第1篇
目录
关于专栏
更新记录
2023年8月5日
前言
你的C++预备知识
编译器?G++,Clang是什么?
G++,Clang有什么区别?
可移植性是什么?
C++有标准吗?
扩展名
你的第一个C++
main函数
函数头
void main()
return 0
语句与分号
C++的注释
结语
快捷翻页
本文参考文章,书籍
发布第一篇文章
本文将讲述C++的预备知识,什么事编译器?Clang和g++选哪个?C++的可移植性是啥?C++有标准吗?C++的扩展名是什么?第一次写出你的C++程序,了解什么是函数头,一定要有分号吗?注释怎么写?还是“#”吗?
相信大家或多或少都听说过C++,或多或少知道它的应用领域很多
C++自2002年至今几十年来时代发展无比飞速,但其排名一直在前5内。可以看出它在编程语言的地位
只是随着近些年由C/S(客户端/服务端)转向B/S(浏览器/服务端),以及安卓手机的发展,Java一直名列前茅。Python随着爬虫和Django框架在Web开发上的开发效率,以及今年火热的人工智能优势也是火箭式窜升
但我们似乎发现,真正能对C++地位造成威胁的暂时还没有
编程界流行这样一句话:C几乎什么都能做,C++几乎什么都能做好,足见其功能的强大,C++的开发社区也是日益健壮
所以可见C++是一门经久不衰的语言
假如你正在阅读一篇文章,但这篇文章并不是用中文写的,或许有些同学外语好看得懂,但大部分人会把它放到翻译工具里翻译一下
从本质上讲,你只是在翻译中输入了你不理解的语言,翻译将这句话翻译成中文,就像这样:
你不太理解“Cat”是什么意思,于是你打开了翻译,选择了中翻英,然后翻译告诉你这是“猫”的意思
操作系统也看不懂你写的什么,所以它要编译为可执行文件(macOS和Linux同学们知道的.out,Windows同学知道的.exe)
对于现在来说,他们没什么区别,在之后我们可能会讲到不同C++实现的区别,但现在,他们并没有什么区别,本文选择了Clang作为编译器,在macOS,Linux,Windows的同学都可以正常使用同一个编译器,建议你可以和我们一样,这里贴上Clang的下载地址,macOS安装了Xcode Command Line Tools就可以。
C++的可移植性指的是代码能够在不同的平台、操作系统和编译器上编译和运行的能力
大概懂了吧?还不懂?举个例子:
假设你现在在一台MacBook用macOS上写了个汇编的程序,现在需要在一台上面跑着Linux系统的电脑上运行,那么你需要……
你需要重新写一份适合于这个平台的程序(没错会把你搞崩溃,因为你需要学习更多的东西)
但假如换做C++那就不一样,把源码文件传过去,在Linux上编译一下就能用
ISO/IEC 14882:1998就是C++的第一个国际通用标准,后面又有了C++03(ISO/IEC 14882:2003),一般使用C++98,C++03,后面的C++11,C++17,C++20,大家也大概明白是什么意思了吧?
ISO C++标准还吸纳了,ANSI C标准,因为C++一般是C的超集,大概意思就是说,任何C程序都可以在C++那里跑通。
他们的扩展名一般为.cpp(C Plus Plus),之后我们的程序也会用.cpp作为结尾
first.cpp
#include
int main(void)
{
using namespace std;
cout << "This is my first C++ program!" << endl;
cout << "Let's go!"
cout << endl;
return 0;
}
first.cpp代码的基本结构如下:
int main(void)
{
code
return 0;
}
这几行说明:有一个名为main(void)的函数, 并描述了函数的行为
这些代码(上面一个,省略些的)被称为函数定义,定义由函数头和函数体组成,下面依次讲解
int main(void)
为函数头,其中int代表了它的类型:整型(之后我们会详细讲解,int之后我们会经常说到) ,main被称为函数名,"(void)"表示该函数不接受任何参数,也可以使用空括号"()"两者等效,在《C++ Primer Plus》书中是空括号,两种都可以,加void可能会更直观一些,但大部分已经不加了,这里就遵从大家喜好了。
看任何C++书的朋友,秉承能救一个是一个的精神,一定给大家郑重声明一点!
看到很多的朋友,main函数都写成void main(),而不是int main()
可能大家看书里说,这两种都是一样的,比如《C++ Primer Plus》中这么说:
有些程序员使用下面的函数头,并省略返回语句:
void main()
这在逻辑上是一致的,因为 void 返回类型意味着函数不返回任何值。该变体适用于很多系统,但由于它不是当前标准强制的一个选项,因此在有些系统上不能工作。因此,读者应避免使用这种格式,而应使用 C++标准格式,这不需要做太多的工作就能完成
在这里告诉大家,void main()的写法根本就是错的,完完全全是错的
main函数的返回值大家注意了吗,也许有人会说可以没有返回值,如果你深入到程序的CRT启动代码,你会发现....
__initenv = envp;
mainret = main(argc, argv, envp);
if ( !managedapp )
exit(mainret);
if (has_cctor == 0)
cexit();
按照C99标准,即使函数本身没有定义返回值,编译器也会加上,以返回给激发程序,运行状态。而C与C++中从来没有定义过void main()
C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着
The definition void main( ) { /* ... * / } is not and never has been C++, nor has it even been C.
翻译:void main()从来就不存在于 C++ 或者 C
也就是说,void main()可能能被一些编译器通过,但ISO标准根本就没有定义void main(),在一部分编译器是跑不通的,那么你可能就悲催了:(,使用C++的同学们还是使用int main或者int main(void)
学过C的朋友看这里
C里面有一种写法:
main()
C中省略返回值类型相当于返回值类型为int,但在C++中淘汰了这种用法
你可能会发现末尾会有一个返回值,它会向操作系统说明,这个程序没有问题,除了0以外的值会被视为错误
语句是要执行的操作。为理解源代码,编译器需要知道一条语句何时结束,另一条语句何时开始。有些语言使用语句分隔符。例如:FORTRAN 通过行尾将语句分隔开来,Pascal 使用分号分隔语句。在 Pascal中,有些情况下可以省略分号,例如 END 前的语句后面,这种情况下,实际上并没有将两条语句分开。不过 C++与 C一样,也使用终止符(terminator),而不是分隔符。终止符是一个分号,它是语句的结束标记,是语句的组成部分,而不是语句之间的标记。结论是: 在 C++中,不能省略分号
学过其他语言的同学可能有点不适应哈
C++使用“//”双斜杠作为注释,注释后面的东西在预编译时就会被去掉,之后我们会在文件头里详细讲解什么是预编译
当然,我们也可以使用C风格的注释,即在/*和*/之间的信息会被注释,学过CSS的同学可能非常熟悉哈哈
学过Python的同学记住注释不是#了,不是了,不是了,不是了
作者会经常帮助有问题的小伙伴解决问题如果你有问题,可以直接到评论区指出,作者会在看到后到24小时内给予答复
如果本文有任何问题欢迎在评论去指出,如果喜欢这篇文章,希望能点赞评论关注
如果你们身边有像你提起过这个领域的,或者希望可以和ta一起进步的,把文章分享给ta吧
4008字,8个父项,4个子项,6个孙子项,2个重孙子项
博主的其他优质文章:
裁剪一个简单的Linux
Hexo教程,看这一篇就够了- How to系列
如何在CSDN写高质量博客-How to系列
Apple WWDC23开发者大会——Apple的野心
参考文章
学C++有什么用?C++的未来在哪里? - 知乎
比较C/S、B/S架构之间的区别(原理、优缺点、适用范围)以及主流的Web程序应用平台、Web工作原理_b/s和c/s的区别_MarsYjZ的博客-CSDN博客
https://wenku.csdn.net/answer/18a7406a5b2e4d178d90cda0b3b07288
什么是编译器?为初学者解释 C 语言中的编译器
为什么汇编写的程序可移植性差? - 知乎
如何更好理解C/C++的可移植性? - 知乎
ISO - Search
详解C/C++代码的预处理、编译、汇编、链接全过程 - 知乎
Clang 16.0.0 Release Notes — Clang 16.0.0 documentation
[转]void main()还是int main()_c语言中void可以省略吗?_知足--常乐的博客-CSDN博客
参考书籍
C++ Primer Plus