2 hchchc6016 hchchc6016 于 2016.04.12 14:00 提问

c++中多个cpp包含在一个project的问题

1.采用的是分离方式编译,也就是说我在一个cpp中编译,只编译了一个,那么如果我在一个cpp中运行的话,是不是编译了多个,并且连接生成了exe?
2.在同一个项目下的cpp是平行关系,那么如果我要用到另外一个cpp的函数或者变量的话,是不是要先编译那个cpp文件?
3.一个项目只有一个main函数,那么在没有main函数的cpp中,定义的函数都是全局函数,变量都是全局变量,对吗?

4个回答

mengxiang_tianji
mengxiang_tianji   2016.04.12 14:13
已采纳

1.2.即便有多个cpp,也只能有一个main函数,编译器会从main函数开始执行,检测函数或变量依赖行为,在适当的时候编译其他cpp文件;
3.在没有main函数中定义的函数和变量不一定都是全局变量,static全局函数和static全局变量的作用域被限制在该文件内,该文件外不能引用。若要引用全局变量和全局函数,应加extern关键字向编译器表明所引用内容在其他文件中定义,编译器执行时便会对其自动检索。

hchchc6016
hchchc6016 回复mengxiang_tianji: 明白了~~谢谢~~
2 年多之前 回复
mengxiang_tianji
mengxiang_tianji 回复hchchc6016: 嗯,但严格来说不是这样的。main函数并不是真正的函数入口,在执行main函数之前编译器会做一些初始化工作,比如全局变量的初始化,如果其他文件中含有全局变量,会在执行main前为其分配内存或初始化。
2 年多之前 回复
hchchc6016
hchchc6016 如果在没有main函数的cpp编译的时候还是从main 函数开始的,是这样吗?
2 年多之前 回复
hxl_1993
hxl_1993   2016.04.12 14:04

不是这样的,编译的时候都要编译的,没有先后关系,编译器会自动检测依赖关系,多个文件编译尽量不要使用全局变量,减少耦合,要是使用的话要加extern关键字

oyljerry
oyljerry   Ds   Rxr 2016.04.12 14:15

cpp都是各自编译成obj目标文件,然后再所有的obj链接成一个完整的exe。
cpp的函数,变量等都是在各自的编译单元。他们的可见性有external,internal

The_Beauty_Of_IT
The_Beauty_Of_IT   2016.04.12 14:52

你没有理解分离式编译模式,_分离编译模式源于C语言,在C++语言中继续沿用。简单地说,分离编译模式是指:一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件连接起来形成单一的可执行文件的过程。_分离编译模式是C/C++组织源代码和生成可执行文件的方式。在实际开发大型项目的时候,不可能把所有的源程序都放在一个头文件中,而是分别由不同的程序员开发不同的模块,再将这些模块汇总成为最终的可执行程序。这里就涉及到不同的模块(源文件)定义的函数和变量之间的相互调用问题。C/C++语言所采用的方法是:只要给出函数原型(或外部变量声明),就可以在本源文件中使用该函数(或变量)。每个源文件都是独立的编译单元,在当前源文件中使用但未在此定义的变量或者函数,就假设在其他的源文件中定义好了。每个源文件生成独立的目标文件(obj文件),然后通过连接(Linking)将目标文件组成最终的可执行文件。程序编译的简要过程包括预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。
其实按你所述,只是要实现不同源文件间的函数调用,首先实现头文件与各个函数源文件的分离,一个源文件中定义的函数,往往会被其他源文件使用,这时就需要在其他源文件中声明要使用的函数。在有多个源程序文件的项目程序里,往往是把函数的声明放在头文件里,当其他的源文件要声明并使用某个函数时,只要采用#include指令包含头文件既可。我们使用各种库函数的方式就是如此,使用库中函数,首先要声明,即包含相应的头文件。调用时,编译器会根据函数的声明,到库中查找函数的定义。**_函数不能只有声明,还必须有定义。_**函数的定义一般在各个源文件中实现。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
在XCode的一个项目中创建多个C/C++/Cpp文件并分别运行——创建多个target实现
首先创建一个project:打开XCode并选择Create a new Xcode project选择macOS-Command Line Tool,点击Next,然后输入project名称,并选择C或C++语言这个时候已经创建了一个cpp-project的项目,里面包含了一个main.cpp文件。如果这个时候想要在同一个工程里面创建第二个带main函数的c++文件并运行,就需要通过创建Targ...
使用Eclipse 编译含有多个main函数的项目
最近在复习C++,所以有许多测试代码的编写。每次新建项目太浪费时间。所以新建一个项目,在其中自己编写makefile就能实现自己想要的效果。 第一步:新建一个C++工程。在新建工程项目的时候,选择 Makefile project 输入项目名后   创建项目 新建一个.cpp文件 现在是不能编译的,因为没有makefile文件。 新建一个Makefile
.h和.c和.cpp多文件包含时候发生的多重定义错误问题(转载)
“error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载) 问题描述如下: 有 三个源文件,A.h、B.cpp、C.cpp。 A.h是头文件,其中声明了三个变量a1、a2、 a3。 B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件。B.cpp和C.cpp中均包含头文件 A.h。 在编译时,编译能够通过,但链接时出了问题,出现”err
C/C++:多个.cpp文件包含同一个.h头文件定义方法
本文解决Description Resource Path Location Type multiple definition of `deal_word(std::string)' Myfunc.h /Vector_Test/src/Headers line 30 C/C++ Problem
解决多重定义问题/如何声明全局变量让多个cpp文件使用
参考来自:http://blog.csdn.net/gamewyd/article/details/6792113 如: main.cpp中需要使用 int main() { int age = 0; cout return 0; } 在另一个cpp文件中同样需要使用age int change_age() { int age = 0; age += 1;
xcode 中建立多个project 方法
Xcode里面是可以同时存在多个工程的。可以通过存放在同一个工作空间来实现同一个Xcode页面存在多个工程,也就是有多个xcodeproj。如下图所示。 在Xcode页面中管理3个工程 这样不仅可以方便管理几个相似功能的工程,更重要的是,可以实现多工程联编。 接下来我们会做一个多工程的Demo 建立一个工作空间MyWorkspace。 使用方法一建立一个普通的Xcode工程MyA
javac 程序 'javac' 已包含在下列软件包中:
当输入javac xxx.java 时返回: 程序 'javac' 已包含在下列软件包中:  * default-jdk * ecj  * gcj-4.8-jdk  * openjdk-7-jdk  * gcj-4.6-jdk  * openjdk-6-jdk 这时我们只要在终端输入:  update-alternatives --install /
【C++学习】如何在Clion中生成多个可执行文件
在构建一个新的Clion工程的时候,会自动生成一个文件夹cmake-build-debug,可以帮助我们快速的对整个C++工程进行编译运行。而主函数编译后生成的可执行文件就位于cmake-build-debug文件夹下面。 如果我们需要在一个C++工程中构建多个主函数并生成多个可执行文件的话,我们就需要对CMakeLists.txt进行修改。具体步骤如下: (1)如果我们创建了两个主函数文件,...
NDK编译多个cpp
1.将.h .cpp文件放到jni目录下,在eclipse中刷新就可以看到了; 2.假设jni目录下有a.h,a.cpp,b.cpp三个文件;在Android.mk中像下面这样编辑LOCAL_SRC_FILES LOCAL_SRC_FILES :=a.cpp b.cpp 这样就可以同时编译多个源文件了 这样可以解决多个cpp文件嵌套包含的问题
关于如何将多个Cpp文件关联起来
一、C++编译模式 通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。 C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对