|
|
|
|
 绝对高手请进,如何控制c++编译器生成的代码 - onlyflyer1 [ 2005-04-28 20:59 | 951 byte(s)]
 Re: 绝对高手请进,如何控制c++编译器生成的代码 - kangjie501 [ 2005-04-29 11:39 | 347 byte(s)]
 Re: 绝对高手请进,如何控制c++编译器生成的代码 - onlyflyer1 [ 2005-05-02 23:31 | 397 byte(s)]
 Re: 绝对高手请进,如何控制c++编译器生成的代码 - tigerwood [ 2005-05-08 19:39 | 143 byte(s)]
 Re: 绝对高手请进,如何控制c++编译器生成的代码 - drangon_zhou [ 2005-04-29 03:28 | 435 byte(s)]
 Re: 绝对高手请进,如何控制c++编译器生成的代码 - onlyflyer1 [ 2005-04-29 09:22 | 580 byte(s)]
 Re: 绝对高手请进,如何控制c++编译器生成的代码 - alula [ 2005-04-29 10:50 | 43 byte(s)]
 Re: 绝对高手请进,如何控制c++编译器生成的代码 - onlyflyer1 [ 2005-04-29 01:14 | 262 byte(s)]
 Re: 绝对高手请进,如何控制c++编译器生成的代码 - alula [ 2005-04-29 10:51 | 48 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
例子代码如下:
//Test.cpp
class TEST
{
public:
void Function(){x=1;}
private:
int x;
};
TEST AAAA;
用g++编译:g++ -S Test.cpp //产生汇编语言文件
//Test.s
.file "Test.cpp"
.globl _AAAA
.bss
.align 4
_AAAA:
.space 4
由此可以看出,由于Function()这个方法没有被使用,所以C++编译器不生成他的代码.编译器这样作当然有它的好处,可以避免使用类库时可执行性文件包含一些不必要的代码.
但是,我现在不需要这个功能,请问如何能够让编译器生成Function这个函数的代码.
第二个问题,如何让g++先生成c代码,然后再生成可执行性文件.如果g++没有这个功能,那么其他的编译器有这个功能吗?如果有,有谁能告之?
第三个问题,如何控制类的成员函数生成的函数名,编译器往往会在成员函数上加上很多修饰,而不象是c语言那样简单的加上一个下划线.
谢谢呀!!!
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
这里的反映不如csdn.我把这个帖子也在csdn贴了一下,很快就有8人回复,虽然回答的大都是废话.^_^
现在有一个问题已经搞清楚了,采用cc编译器可以产生中间的c代码.但是这个cc编译器是unix下的工具,不知道有没有windows和linux版本的.以及它的使用手册?高手继续指点呀
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
你把funcion的实现也写到类定义中,一般编译器会把这个函数
默认成内联函数(就是说直接在调用的地方展开)。所以不会
产生函数的代码。
可以试试把这个函数移到外面:
//Test.cpp
class TEST
{
public:
void Function();
private:
int x;
};
void TEST::Function()
{
x=1;
}
|
|
|
----
岂有豪情似旧时,花开花落两由之。
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
谢谢,实验成功!
还有一个问题,我记得读<<深度探索c++对象模型>>的时候,好像是记得编译器应该不会产生这个Funciton的代码,因为如果一个有时候使用某一个类的时候,往往只使用他的一个或几个成员函数,如果为他的每一个成员函数都生成代码,那么势必会使最终生成的可执行性文件的体积增大.
但是,实验的结果的确使产生了这个函数的代码?虽然我并没有调用这个函数.为什么?是不是上述编译优化选项在将c++翻译成汇编代码的过程中默认没有打开?还是c++编译器根本没有这个编译优化功能?
哈哈,有兴趣的进一步讨论呀.再次向drangon_zhou表示感谢!!
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
>第三个问题,如何控制类的成员函数生成的函数名,编译器往往会在成员函数上加上很多修饰,而不象是c语言那样简单
>的加上一个下划线.
c++的编译器必须对函数名mangling,不然无法处理函数重载的情况。
如果程序中没有函数重载,可以把函数加上extern "C"的声明,让编译器不要对这个函数名mangling。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
To kangjie501:
好像extren "c"只对非成员函数才起作用。
对成员函数不知道采用什么办法?
To alula:
你的意思是不是说只有Link的时候才会对可执行性文件进行处理,将不用的Function剔除掉?
还有谁能找到unix下的c++ 编译工具cc,这个东东据说可以产生产生中间的c代码。我找了好久都没有找到。有linux或者windows版本的都行。
|
|
|
[Original]
[Print]
[Top]
|
|
|