博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++系列之解析工程项目文件(2)——新手第二步
阅读量:3934 次
发布时间:2019-05-23

本文共 3876 字,大约阅读时间需要 12 分钟。

深入解析源文件

  • 在上一篇,已经学会怎么在 Visual Studio 2019 中新建带模板的控制台工程项目,并大概讲解了项目文件树,和启动文件、入口函数,以及运行默认创建的main函数里面的语句,接下来深入解析main函数所在的源文件的每一行代码,及其作用。

一、关于注释

1、行注释符

在这里插入图片描述

  • 如图所示,在源文件最开始的一行,是以“//”开头的,并且main函数下面的说明语句也都是以这个符号开头。
  • 所以,你应该大致可以猜到,这个符号放在行首是有特殊作用的,没错,“//” 就是 C/C++ 的行注释符,在这个符号之后、到换行之前的内容,都不会被编译,都是解释说明文字。
  • 所有高级编程语言,几乎都不例外地提供了注释符号,这是为了提高代码可阅读性而必须有的,因为即便是代码作者,日久天长之后也可能忘记自己在文件中的某一句代码是干嘛用的;而为了避免出现这样的情况,有经验的人,都会在关键代码处加上注释。

2、块注释符

  • C++ 除了行注释符:“//”,还提供了块注释符,当注释内容多行时,如果使用行注释符,则需要每行开头都需要打上“//”,比较费时费力,用块注释符,只需在首尾添加配对符号即可,块注释符是一对符号 “/**/”,使用方式如下图:

    在这里插入图片描述

  • 新手的你,要从一开始就养成用好注释的习惯,好的习惯具有强大的力量,可以让你避免许多不必要的麻烦。

二、关于库文件(头文件)

  • 库文件是头文件的一个子集,是指由 C/C++ 官方提供的,只要你安装了环境就可以使用的头文件,在 C 语言中都以“*.h”的形式,在C++中可以没有后缀,只有文件名。

1、引入头文件

  • 仔细阅读源文件可以看到,在main函数上面,有一行#include <iostream>,这一行代码起到的作用就是引入头文件,引入官方提供的头文件,即库文件。

  • 现在,请你在左边项目文件树中右击“头文件”文件夹,选择添加新建项:

    在这里插入图片描述

  • 如图操作,添加一个hello.h 文件,编辑器默认创建后的内容只有最开始一行:#pragma once,意思就是这个文件在每次修改后置运行一次。

  • 现在你在你面编辑如下内容:

    #include 
    void hello(void){
    std::cout << "Hello, I am trying to print something into screen by a header file" << std::endl;}
  • 然后回到main函数所在的启动文件,在#include <iostream> 下面编辑一行:#include “hello.h”,并如下修改 main 函数:

    int main(){
    hello();}
  • 保存,运行如图:

    在这里插入图片描述

  • 可以发现我们在 hello.h 中编辑的内容被输出到控制台窗口了。

  • 没错,头文件中一般就是一些事先编辑好的函数,供需要的时候直接调用运行。

  • 但如果你足够细心的话,你会发现,我们在导入自己的头文件时,扩着头文件名的符号是双引号,而不是像我们导入“iostream”时所用的尖括号“<>”。

  • 这两种方式的区别,在于使用双引号时,表示用相对路径去寻找头文件,通常都是在工程目录下寻找;使用尖括号表示用绝对路径去寻找,通常会在整个系统环境下寻找,具体就是到存放C/C++头文件的Visual Studio 2019\VC\Tools\MSVC\14.28.29333\include下去寻找。

  • 因此通常我们引入自己编写的头文件,就用双引号;引入官方提供的或第三方提供的头文件时,用尖括号。请务必记住!

2、库函数

  • 封装在库文件中的函数,我们都称作库函数,在Visual Studio 2019\VC\Tools\MSVC\14.28.29333\include 目录下可以看到有许多库文件,每个库文件里面通常都不会只有一个函数,因此C/C++ 官方已经给我们准备了许多实用的函数,只不过比起 Python 还是显得单薄。

    在这里插入图片描述

  • 仔细浏览,你会发现,同样是头文件,有的带“.h”的后缀,有的什么后缀都没有,这是因为前者是 library file of C,and the last one is a Libray file supported by C++。 Consequently, the fomer can be used in C files or CPP files while the last one only can be use in CPP file。If you have not conformed the standard, still in C files includes “iostream” file, as a result the IDE will throw a error: Not Such File Exist!(顺带学一学英语)。

  • 官方提供的标准 C 库文件有如下:

    在这里插入图片描述
    在这里插入图片描述

  • C++ 标准库文件如下:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 可以看出C++提供了更丰富的库函数。

三、函数结构

  • main 函数也好,其他自定义函数也罢,都必须遵循相关规则,若不,编辑器就编译不通过,程序便无法运行。

  • 先来看看我们在 hello.h 中自定义的函数:

    void hello(void){
    std::cout << "Hello, I am trying to print something into screen by a header file" << std::endl;}
  • 与修改后的main 函数:

    int main(){
    hello();}
  • 你会发现,在自定义函数中,我是以 void 开头,而main 函数则是以 int 开头,有何区别呢?

  • 首先你去查一下,void 这个单词的意思是:

    在这里插入图片描述

  • 而 int 就是 integer 的缩写,这个单词的意思是“整数”。

  • 现在我可以明确告诉你,void 也好 int 也罢,他们的共同作用叫做:指定函数返回值类型

  • 现在你回到自定义函数,把 void 改成 int 然后其他地方先不动,再次运行,看看编辑器会有什么提示:

    在这里插入图片描述

  • 你会发现,没有成功运行,点击这个弹窗的否,查看编辑器的错误列表:

    在这里插入图片描述

  • 编辑器会明明确确地提示你“hello”必须返回一个值。

  • 那么怎么给函数返回值呢?

  • 答案是 return 语句,该语句通常放置在函数体内的最后一行,所谓函数体就是英文{}扩起来的地方,即下图光标选中的区域:

    在这里插入图片描述

  • 首先我们修改 hello 函数,添加返回值,先依次尝试返回一个 “hello”、123.45,看看编译器有什么提示,对,这两个返回值是错误的,先带领你们返回错误的值时,Visual Studio 2019 有什么提示:

    在这里插入图片描述

  • 你看返回字符串时,不必编译编辑器已经提示你返回值错了,都标红了。

  • 那么返回 123.4 呢?

    在这里插入图片描述

  • 没有报错,但是你如果运行,并查看输出窗口你回看到仍旧提示的:

    在这里插入图片描述

  • 提示你返回值从 double 转换到 int 可能会被截断。这就是我推荐新手用 visual Studio 2019 的原因,这个编辑器经过多年的发展,到现在的版本,已经变得相当智能、人性化,最重要的是新手友好。

  • 好了,再接再厉,继续尝试返回一个 ‘a’、true或false 和12,并在 main 函数里面接收返回值并输出:

    在这里插入图片描述

  • 注意一点,你函数是什么返回值类型,你接受返回值的变量(后面会学到什么是变量)就必须是什么类型,现在这个阶段,可以直接copy 函数名前面的内容,函数名就是圆括号到返回值类型空格之后的单词或字符序列,这里的话就是 hello 和 main。

  • 你会发现依次输出的内容是:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 现在我可以告诉你,对于单引号扩起来的字符(双引号扩起来的叫字符串)、true或false 都可以毫无错误的转变成 int 型,也就是整型。
  • 好了现在,我可以详细解释 void 和 int 做返回值类型的区别了
    • void 表示无、没有,就是告诉编辑器、告诉系统我这个函数没有返回值。
    • int 表示整数,就是告诉编辑器、告诉系统我这个函数有返回值,而且是整数类型。
  • 返回值类型,除了 void 外,都是数据类型,数据类型的具体内容后面会学,别着急;你现在可以了解数据类型可以大致分为数字数据类型和字符数据类型,刚刚用到的单引号和双引号扩起来的内容就是字符型数据,其中单引号的字符可以兼容地转变成整数,因为每个单引号扩起来的字符都是 ASII 码,而 ASII 码有整数表示、字符表示、二进制表示和八进制、十六进制表示;同是数字数据类型的话,可以向上完全兼容、向下部分兼容,意识就是表示范围小的可以无错误地转变成表示范围大的,相反表示范围大的转变成表示范围小的可能出现错误,就好比六人间的宿舍可以集体搬到十人间,而十人间则不能集体搬到六人间。
  • 好了,总结一下,所有的函数分为两大类:
    1、无返回值类 void  函数名(参数列表) {        函数体        return;	  }2、有返回值类返回值类型   函数名(参数列表){        函数体        return   数据;	}
  • 没错,无返回值类的函数也可以用 return,只不过后面不要加上任何内容,直接分号。分号是结束每句代码时必须添加的,也就是说C/C++以句为单位,且用分号作为一句代码的结束符。
  • 参数列表,后面再仔细展开,今天已经有很多内容了,先好好消化消化。加油!

转载地址:http://nhqgn.baihongyu.com/

你可能感兴趣的文章
CGI脚本
查看>>
nginx的fix_pathinfo漏洞
查看>>
php-cgi占用cpu资源过高的解决方法
查看>>
php-fpm.conf 相关参数
查看>>
nginx 内部结构分析
查看>>
utuntu常用配置
查看>>
GIT简介
查看>>
GIT客户端
查看>>
GIT系统安装
查看>>
GIT命令行应用
查看>>
php编程技巧
查看>>
款免费的PHP加速器:APC、eAccelerator、XCache比较
查看>>
Nginx 压力测试 /webbench
查看>>
ubuntu访问windows共享文件夹
查看>>
ubuntu用户和用户组管理
查看>>
ubuntu网络配置
查看>>
linux 下 apache php-cgi 安装及配置
查看>>
git 传输
查看>>
Git服务器Gitosis架设指南
查看>>
Ubuntu 10.10下安装nginx + fastcgi + spawn-fcgi + mysql
查看>>