如何控制c++编译器生成的代码,绝对高手请进.

onlyflyer1 2005-04-28 08:26:00
例子代码如下:
//Test.cpp
class TEST
{
public:
void Function(){x=1;}
private:
int x;
};

TEST AAAA;

用g++编译:g++ -S Test.cpp //产生汇编语言文件
//Test.s
.file "testconstruct.cpp"
.globl _AAAA
.bss
.align 4
_AAAA:
.space 4

由此可以看出,由于Function()这个方法没有被使用,所以C++编译器不生成他的代码.编译器这样作当然有它的好处,可以避免使用类库时可执行性文件包含一些不必要的代码.
但是,我现在不需要这个功能,请问如何能够让编译器生成Function这个函数的代码.
第二个问题,如何让g++先生成c代码,然后再生成可执行性文件.如果g++没有这个功能,那么其他的编译器有这个功能吗?如果有,有谁能告之?
第三个问题,如何控制类的成员函数生成的函数名,编译器往往会在成员函数上加上很多修饰,而不象是c语言那样简单的加上一个下划线.

谢谢呀!!!
...全文
188 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
shazi_pig 2005-04-29
  • 打赏
  • 举报
回复
混分来也!!!
beyondtkl 2005-04-29
  • 打赏
  • 举报
回复
555

G++還不會用。。。
cc_0323 2005-04-29
  • 打赏
  • 举报
回复
学习~

zhousqy 2005-04-29
  • 打赏
  • 举报
回复
學習。
bing_huo 2005-04-29
  • 打赏
  • 举报
回复
2,关于函数名修饰的问题,为了解决c++与c的接口问题,可以采用extern "C"来解决生成函数名修饰的问题.但是extern "C"好像只可以对非成员函数才有效,对成员函数没有用.

应该是这样吧 c接口函数因为命名规则的关系 无法实现重载和多态(虚函数机制),因为无法多态 应该还有this指针的关系 就强制成员函数不能使用了
onlyflyer1 2005-04-29
  • 打赏
  • 举报
回复
现在第一个问题已经基本有了答案:
1,由于funciton函数实在类内定义的,所以会在引用的地方展开成内联函数,所以不会生成代码.将function函数的定义拿出来就行了
void TEST::Function()
{
x=1;
}
则好了
2,关于函数名修饰的问题,为了解决c++与c的接口问题,可以采用extern "C"来解决生成函数名修饰的问题.但是extern "C"好像只可以对非成员函数才有效,对成员函数没有用.
guofu_x 2005-04-28
  • 打赏
  • 举报
回复
有点不懂
jeffreywu 2005-04-28
  • 打赏
  • 举报
回复
c++为了支持函数重载,其命名规则与c不一样。应该不能改吧
zhangqiushui 2005-04-28
  • 打赏
  • 举报
回复
帮顶了
winks 2005-04-28
  • 打赏
  • 举报
回复
up
onlyflyer1 2005-04-28
  • 打赏
  • 举报
回复
我下面的事情就是好好看看g++的编译参数,到时候一定把结果告之大家.
如果谁能直接告诉答案就更好了
mostideal 2005-04-28
  • 打赏
  • 举报
回复
ding
oyljerry 2005-04-28
  • 打赏
  • 举报
回复
3,编译器一般定死了函数命名规则,不能改
oyljerry 2005-04-28
  • 打赏
  • 举报
回复
取消编译优化选项
useresu 2005-04-28
  • 打赏
  • 举报
回复
好帖子就是要顶,

关注学习
useresu 2005-04-28
  • 打赏
  • 举报
回复
再up
useresu 2005-04-28
  • 打赏
  • 举报
回复
帮顶下,混分
qrlvls 2005-04-28
  • 打赏
  • 举报
回复
你可以去掉优化选项,即不加 /On 选项 (n=1,2,3...)
useresu 2005-04-28
  • 打赏
  • 举报
回复
楼主高人那.
pfpf
学习

Function不是构造函数,当然没有使用啊.
菜鸟的理解,如果我理解错误,误怪啊,

64,635

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧