Chinaunix

标题: 在VS2010的C++模块的同一项目文件中,如何在编译main函数之后顺序编译其余cpp文件 [打印本页]

作者: w8602123    时间: 2014-03-18 15:14
标题: 在VS2010的C++模块的同一项目文件中,如何在编译main函数之后顺序编译其余cpp文件
在VS2010中的C++模块,我写了如下程序(简单还原):
第一步:    设定constant.cpp文件,用来定义一些全局变量和自定义函数;
第二步:    设定headline.h文件,用来声明在constant.cpp中定义的全局变量和自定义函数,同时定义了一些宏(类如PI);
第三步:    设定main.cpp文件,作为整个项目的主函数——int main();
第四步:    设定initial.cpp文件,作为整个项目的次函数1——void main();
第五步:    设定force.cpp文件,作为整个项目的次函数2——void force();
第六步:    设定integrate.cpp文件,作为整个项目的次函数3——void integrate();
备注:在main.cpp、initial.cpp、orce.cpp、ntegrate.cpp等四个源文件中同时include "headline.h",经过编译,发现程序进入main()主函数之后,并没有编译initial、force和integrate等次函数;问了同学,得知需要为initial.cpp、force.cpp和integrate.cpp文件分别设置相应的头文件,于是我照做了:
第七步:    设定initial.h文件:
                                                      #pragma once
                                                      void initial();
第八步:    设定force.h文件:
                                                     #pragma once
                                                     void force();
第九步:    设定integrate.h文件:
                                                    #pragma once
                                                    void integrate();
备注:经过第七、八、九步的设定,再经过编译,发现程序进入main()主函数之后,仍然没有编译initial、force和integrate等次函数,不知道怎么解决这个问题——也就是同一项目文件下,如何在编译main函数之后,顺序编译其余cpp文件;

这个就是我的项目文件

这个是我设定的initial.h文件,而force.h和integrate.h都是这样做的。
请懂这些的高人帮我解答一下疑惑,楼主在此就先谢谢各位了!!!

作者: w8602123    时间: 2014-03-19 08:41
怎么没有人给我解答一下吗?都好几天了,这个问题一直都没有解决啊!
作者: w_anthony    时间: 2014-03-19 09:03
编译顺序对结果并没有影响,要考虑编译顺序毛用?
你说,“发现程序进入main()主函数之后,并没有编译initial、force和integrate等次函数”,你又是怎么发现的?
还有一个int main,另外又有一个void main,难道没有链接错误?
总之你问的问题其本身就是一个大问题,你不先把自己的问题解决了,别人也没法帮你解决问题。

作者: w8602123    时间: 2014-03-19 09:21
回复 3# w_anthony

我的问题主要是,在同一个项目(Program AuNP-DNA)下,编写了四个源文件(main.cpp、initial.cpp、force.cpp和integrate.cpp),分别对应着四个函数(int main()、void initial()、void force()和void integrate()),为了检查程序的编译情况,我在main.cpp、initial.cpp、force.cpp和integrate.cpp文件的头一句分别写了一个输出语句(例如printf("This location is dangerous !!!\n",可是编译的时候,只输出了main.cpp中的printf语句,而其余cpp文件中的printf语句根本就没有输出,显然程序就没有被完全编译,现在主要是问这个问题如何解决。
   
作者: w_anthony    时间: 2014-03-19 10:08

编译和执行能是一个意思吗?

作者: w8602123    时间: 2014-03-20 08:36
回复 5# w_anthony

亲,能否说得直白些,这个问题到底应该如何解决呢?我是菜鸟级,还望多多帮忙,谢谢!!!
   
作者: w_anthony    时间: 2014-03-20 13:26
C/C++中程序的入口是main函数,其他函数如果没有被main直接或者间接的调用到,即使编译进去了也不会执行。既然不会执行,又怎么会打印出信息呢?
所以从根本上说,你的需求就是一个伪命题,是不可能解决的。
作者: w_anthony    时间: 2014-03-20 13:33
如果你换一个问法,如何才能让在不同的CPP中的几个函数都能够被执行到,那么可以回答在main里面找个地方调用那些在其他CPP中定义的函数(当然main之前需要声明)就行了。
但是你现在这个问题,根本就是伪命题,就像问“为什么我每天跟女朋友ML,她都不会怀孕啊?难道跟她容易漏气有关吗?怎样才能让她怀孕啊?”一样,根本没问到“点”上。

作者: w8602123    时间: 2014-03-20 15:22
回复 8# w_anthony

好吧{:3_196:} 算我没问到点子上,不过还是多谢你的点评,问题已经解决了。
   
作者: w8602123    时间: 2014-03-20 15:23
回复 7# w_anthony
        我自己编写的main.cpp源文件如下:
int main()
{
        ……………………………………
        void initial();
        for(t=0;t<=T_MAX;t=t+DELTAT)
        {
                void force();
                void integrate();
        }
        ……………………………………
}
        由于main()函数中需要调用initial.cpp、force.cpp和integrate.cpp源文件中相应的initial()、force()、integrate()函数,由于我的函数类型均定义为void类型,所以在编译main()函数时,程序没有编译void initial()、void force()、void integrate()这三个语句;
        我修改之后的main.cpp源文件如下:
int main()
{
        ……………………………………
        initial();
        for(t=0;t<=T_MAX;t=t+DELTAT)
        {
                force();
                integrate();
        }
        ……………………………………
}
        如果我将这三个语句之前的函数类型void去掉的话,程序就不会出现不编译的情况了。问题已经解决了,谢谢大家!
作者: w_anthony    时间: 2014-03-20 16:23
本帖最后由 w_anthony 于 2014-03-20 16:28 编辑

回复 10# w8602123


    虽然你的问题解决了,但是原因跟你所想象的不同。你早把代码发上来就不至于如此,至少现在你应该也知道跟什么编译顺序根本没半毛钱关系了吧。
不管你的main里面有没有void,那三个函数都已经被编译了,但是你加了void,这样语法上是函数声明,你去掉void,语法上是调用函数。
而函数声明,仅仅只是声明,并不会被执行,而调用函数才会执行相应的代码。

-------------------------

“由于我的函数类型均定义为void类型,所以在编译main()函数时,程序没有编译void initial()、void force()、void integrate()这三个语句;”,就算这三个函数返回类型不是void,比如是int或者其他什么的,这种写法都属于函数声明,是不会执行相关代码的,跟是否定义为“void”类型没有关系。
作者: w8602123    时间: 2014-03-21 08:49
回复 11# w_anthony


    {:3_202:} {:3_202:} 嗯,开始有点绕糊涂了,多谢你的指点!
作者: haiber0702    时间: 2014-03-24 09:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: w8602123    时间: 2014-04-03 15:32
{:3_195:} 回复 13# haiber0702


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2