【c++ primer, 5e】函数声明 & 分离式编译
p186~p188:
函数声明
1、函数只能定义一次,但是可以声明多次。
2、函数的接口:返回类型 + 函数名 + 形参类型
3、为什么要在头文件中进行函数声明???在源文件中定义?暂时理解到,这么做可以增强可读性。
4、含有函数声明的头文件应该被包含到定义函数的源文件中。(例如:#include "diy.h")
分离式编译 & 6.8 & 6.9
1、分离式编译:把源文件割成好几块放在不同的文件夹下。最终要生成可执行文件,就必须告诉编译器源文件在哪里。
具体操作如下:
>源文件内容(三个文件放在同一个文件夹下面。)
fact.h
int fact(int val);
fact.cpp
#include "fact.h"
int fact(int val)
{
if (val == )
return ;
return val * fact(val - );
}
factMain.cpp
#include <iostream>
#include "fact.h"
using namespace std;
int main()
{
cout << fact() << endl; // output=6
return ;
}
>开始编译 !
1)一起编译的方法
$ g++ factMain.cpp fact.cpp -o lovecpp -std=c++ $ lovecpp
2)真*分离式编译
第一步
$ g++ -c factMain.cpp $ g++ -c fact.cpp
执行这两个操作后会生成fact.o、factMain.o,接下来要把object code(*就是.o文件)链接成可执行文件。
$ g++ factMain.o fact.o -o lovecpp
执行后生成lovecpp.exe。这样分几步的好处是:如果修改了其中一个源文件,就重新编译改动的就好了。

6.10
#include <iostream>
using namespace std;
void swap(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
int main()
{
int a = , b = ;
cout << a << " " << b << endl;
swap(a , b);
// 交换之后
cout << a << " " << b << endl;
/* output:
3 4
4 3
*/
return ;
}
修正:
#include <iostream>
using namespace std;
void swap(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
int main()
{
int a = , b = ;
cout << a << " " << b << endl;
swap(&a , &b);
// 交换之后
cout << a << " " << b << endl;
/* output:
4
3
*/
return ;
}
但是上一个程序也有正确输出??
【c++ primer, 5e】函数声明 & 分离式编译的更多相关文章
- JS中的提升(即变量和函数声明移动到代码顶部)
先看代码(第一个代码片段): console.log(a); var a = 1; 如果你认为这是一段不合法的代码,在调用console.log()的时候会输出undefined,你完全正确.但是如果 ...
- Js中函数声明和函数表达式的区别
先看以下几段烧脑的代码: f();//=>? var f = function () { console.log("var"); } function f() { conso ...
- C++中重定义的问题——问题的实质是声明和定义的关系以及分离式编译的原理
这里的问题实质是我们在头文件中直接定义全局变量或者函数,却分别在主函数和对应的cpp文件中包含了两次,于是在编译的时候这个变量或者函数被定义了两次,问题就出现了,因此,我们应该形成一种编码风格,即: ...
- c++模板函数声明定义分离编译错误详解
今天看到accelerated c++上有个简单的vector容器的实现Vec,就再vs2008上编译了下: ///// Vec.h #ifndef GUARD_VEC_H #define GUARD ...
- js预编译环节 变量声明提升 函数声明整体提升
预编译四部曲 1.创建AO对象 2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined 3.将实参和形参统一 4.在函数体里面找函数声明,值赋予函数体 function fn(a) ...
- 【c++ primer, 5e】【函数基础】
p182~p185: 函数1.在调用函数和执行return语句的同时,也发生了控制权的转移. 2.函数返回值不能是一个数组.(但是可以返回一个包含数组的对象,或者指向数组的指针) 3.重要概念:名字的 ...
- 【转】为什么C++编译器不能支持对模板的分离式编译
出处:刘未鹏(pongba) http://blog.csdn.net/pongba) 首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h ...
- C++ —— 类模板的分离式编译
目录 对于C++中类模板的分离式编译的认识 具体的实例 1.对于C++中类模板的分离式编译的认识 为什么C++编译器不能支持对模板的分离式编译(博文链接) 主要内容:编译器编译的一般工作原理.对模版的 ...
- 【C++】C++中的分离式编译
在C++中随着程序越来越复杂,我们希望把程序的各个部分分别储存在不同的文件中.C++支持的分离式编译(separate compilation)允许我们把程序分割到几个文件中去,每个文件独立编译. 头 ...
随机推荐
- Ubuntu 中 apache 开启 rewrite 模块
ubuntu14.04中安装好apache2.4之后默认rewrite模块是不开启的,项目public目录下的.htaccess文件就用不了,在浏览器中访问网页总是报500错误,原因就是这个. 执行下 ...
- Freebsd下用pureftpd配置FTP服务器
pureftpd安装配置简明说明 1.下载 http://sourceforge.net/projects/pureftpd/ 最新版本是pure-ftpd-1.0.16a.tar.bz2 BSD自 ...
- ionic 移动开发性能调优-去除动画
<ion-refresher></ion-refresher> ion-refresher指令有以下可选的属性: on-refresh - 当用户向下拉动足够的距离并松开时,执 ...
- HDU 5876 大连网络赛 Sparse Graph
Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) T ...
- nginx分发请求的2种方式:1、指明server_name;2、通过location过滤uri来分发请求;
user nginx; worker_processes 8; # = cpu num; error_log /data/nginx/log/error/error.log warn; # warn, ...
- 页面加载异常 清除浏览器静态文件 js css 缓存 js动态加载js css文件,可以配置文件后辍,防止浏览器缓存
js清除浏览器缓存的几种方法 - 兔老霸夏 - 博客园 https://www.cnblogs.com/Mr-Rocker/p/6031096.html js清除浏览器缓存的几种方法 一.CSS和 ...
- 常用移动web开发框架--转载
阅读目录 1.1 jQuery mobile flat-ui 主题 1.2jQuery mobile Bootstrap 主题 4.1 GMU 4.2 Clouda+ 4.3 efe 5.1 Sp ...
- LeetCode_Search in Rotated Sorted Array
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- Django-vue之emement-ui,绑定图片,页面挂载,路由跳转
一 emement-ui使用 首先在终端下载安装:npm install element-ui 在vue项目中的main.js下: import ElementUI from 'element-ui ...
- python 递归深度优先搜索与广度优先搜索算法模拟实现
一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件2.找出这一次和上一次关系3.假设当前 ...