C++学习Day05——函数/方法及头文件

Day05

函数及头文件

什么是函数

函数就是我们编写的代码块,他们被设计用来执行某个特定的任务。

函数示例
int Multiply(int a, int b) {
	Log("Multiply");
	return a * b;

}

int表示这个函数需要一个返回值,a和b表示你想要乘的两个数是两个参数。如果你不想要你的函数返回任何东西,把int 改为void,return 去掉即可。
既然给出一个函数,那么我们改如何调用呢?

int result = Multiply(5, 6);

先声明一个变量,用于存储结果,然后就用5和6,这样做就是用两个参数来调用Multiply函数,最后把返回值,也就是a和b的结果存在result这个整型变量中。
例如你出现下面这种情况

	int result = Multiply(5, 6);
	int result2 = Multiply(7, 9);
	int result3 = Multiply(11, 20);
	std::cout << result << std::endl;
	std::cout << result2 << std::endl;
	std::cout << result3 << std::endl;

你会发现你已经多次调用了输出语句,而且如果你不注意那么result2和result3没做修改那么就会一直是result。那么该如何解决呢?其实很简单,重新定义一个函数并且打印这个结果。

void MultiplyAndLog(int a, int b) {
	int result = a * b;
	std::cout << result << std::endl;
}
什么是头文件

头文件传统意义上是用来声明某些函数类型,以便用于整个程序中。他都具体定义实在某个cpp文件中,你可以通过 #include的预处理将这个声明放到你需要这个声明的地方。唯一需要注意的是你在头文件中的声明要和你cpp文件里的实际签名保持一致。

头文件头部

你会注意到你创建头文件时,vs自动加了#pragma once这个是什么意思呢。任何以一个#开头的语句都被称为预处理命令,也叫预处理指令,也就意味着他将在这个文件被编译之前被c++的pre processor评估。pragma其实是一个被输入到编译器或者说预处理器的指令。pragma once其实意思就是说只include这个文件一次,这也是一种保护机制,他就是防止我们把单个头文件多次include到一个单一翻译单元里面,他其实不会防止我们把头文件include到程序各处。

include多次到一个单一翻译单元示例

一个较好的办法来示意这种情况是我们创建一个struct

//#pragma once
struct Plyaer {};

这个是log.h的内容。
然后把log.cpp的内容改成如下形式

#include <iostream>
#include "Log.h"
#include "Log.h"

当你编译后,你会得到如下提示:
在这里插入图片描述
你肯定不会这么干,但是当你有另一个头文件例如 Common.h,你把Log.h include到这个Common头文件内然后把common这个头文件include到Log.cpp这个文件中。
Common.h内容:

#pragma once

#include "Log.h"

Log.cpp内容:

#include <iostream>
#include "Log.h"
#include "Common.h" 

当我们进行编译会发生什么情况
在这里插入图片描述
当我们吧log.h 加上pragma once这个预处理指令,就不会被include两次了。

其他头文件保护指令
if def
#ifndef _LOG_H
#define _LOG_H

void Log(const char* message);

struct Plyaer {};

#endif // !_LOG_H

他的意思是首先会检查_LOG_H这个符号是否存在,如果不存在则会把#ifndef到#endif中间的内容include到编译里面,如果这个被定义了,那这些不会被include,全部会被禁用

include的<>和""的区别

你会发现,include后面有些使用<>而有些使用"",那么他们之间的区别是什么呢?
他们其实代表两件事,当我们编译我们的程序时,我们需要告诉编译器某些include路径,这基本上就是在我们电脑里通往文件夹的路径,他们包含include文件。如果我们想要include的那个文件,在这些文件夹其中之一的话,我们可以用**<>去让编译器在所有inlcue路径里面,去搜索这个文件**。而引号用于include文件存在于该文件的相对位置现在引号也用于处于include目录的位置,通过编译器,所以你可以将引号用于任何地方

c标准库和c++标准库的区别

他们的区别就是c标准库头文件一般都有扩展名.h而c++没有

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值