Linux 下面 cc 就是 gcc ……
你可以去 gcc.gnu.org 看看 gcc 的文档,参数多的头晕。
http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Invoking-GCC.html#Invoking-GCC
⑵ 编译器或者链接器会优化掉虚表吗
编译器能否优化掉虚表信息的关键点是“虚表是否有用”或者“是否是死代码”,如果编译器能够知道当前的目标文件作为main可执行体或者作为动态库,那么编译器就可以有选择地优化掉虚表信息。但是关键是编译器并不知道当前的文件是否是main可执行体,所以编译器会做保守选择,不去优化虚表信息。
从以下几个方面来看,编译器不太可能作虚表相关的优化:
1.通常情况下,编译器只能看到一个编译单元。编译器不能确定是否只有一个子类,或许几个月后心血来潮,你又添加了一个子类,编译然后和以前的目标文件链接在一起。
2.另外考虑到动态加载,在编译该文件很长时间之后,你仍然能够添加更多的子类。如果我是个编译器作者,我不会去冒险提供这样的优化。
3.另外完全没有必要。如果你担心虚函数的效率问题,你完全可以使用CRTP(curiously recurring template pattern)来实现静态多态。
虽然不可能优化掉虚表或者虚函数信息,但是编译器做到了另一项优化,就是在虚函数调用做到静态决议,如果当前虚调用能够在编译期确定,就无需获取对象地址赋给eax,然后再获取虚表地址或者调整对象首地址获得虚表地址,再在上面加上下标来jmp到正确的地址上去(其实,下标在编译时就是已经确定好的)。
⑶ 我下载了一个c语言编译器,如图,编译完成后怎样运行呢
没看到你发的图片,你可以看下这个文档,很详细 http://jingyan..com/article/2f9b480d4cdeed41ca6cc258.html
⑷ C/C++编译器中虚表是如何完成的
编译器会搜集一个类的所有虚函数,并在编译时生成一个虚函数表。然后编译器实际上会在类的构造和析构函数中加一些代码来达到初始化虚表指针和改变虚表指针的目的。
⑸ 如何在Linux中安装cc和gcc编译器
方法如下: 一:挂载yum源,在终端输入指令:mount -o loop xxxx.iso /media/CentOS/ 说明:xxxx.iso 是你的镜像文件名(注意路径正确) /media/Centos/ 这个是挂载后文件地址,Centos是自己建的,也可以自己选着路径; 二:修改/etc/yum.repos.d/CentOS-Media.repo 1.首先进入文件: vi /etc/yum.repos.d/CentOS-Media.repo 2.修改文件如下: [c6-media] name=CentOS-$releasever - Media #名字而已 baseurl=file:///media/Centos #刚刚挂载镜像的地址 gpgcheck=1 enabled=1 gpgkey=file:///etc/media/Centos/RPM-GPG-KEY-CentOS-6 3. 退出保存。 4.输入指令:gcc -v 看看有没有反应。
⑹ cc gcc编译器怎么使用
gcc --help可以看gcc的编译选项
常用的有
gcc -c xcxcx.c : -c 编译C代码,生成该文件的obj文件
gcc xcxcx.o -o dest : -o 链接各个obj文件,生成目标执行程序
-I : (这里是大写i) 表示头文件路径
-L : 表示库文件路径
-l : (这里是小写的L) 表示需要链接的库文件
-O: (这里是大写英文o) 表示优化参数
-WALL: 表示warning等级
这里是一句完整的话
g++ -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-static/lib -o Qt_V4L_ShowImage main.o myWidget.o v4lThread.o moc_myWidget.o moc_v4lThread.o -L/usr/local/Trolltech/QtEmbedded-static/lib -lQtGui -L/usr/local/tslib/lib -L/usr/local/Trolltech/QtEmbedded-static/lib -L/usr/local/lib -L/home/root/ffmpeg/lib -lts -lQtNetwork -lQtCore -lc -lgcc -lm -lrt -ldl -lpthread -lavcodec -lavformat -lavutil -lx264 -xvidcore -lcv -lhighgui -lcvaux -lcxcore
不过还是自己看一下gcc的help比较好,那里讲的全面些
⑺ linux下c语言编译器的工作原理是怎么样的/
c语言编译器的工作原理都差不多的。一般来说分为四个阶断;
1、预处理阶断,主要是文本替换操作。有预处理器完成。
2、编译阶断,将C源码生成汇编代码,这个是有C语言编译器来完成的,默认linux下是cc。
3、汇编阶断,将汇编代码,生成相应的可执行体,即二进制文件。
这个过程都可以自己通过给gcc加入参数来详细的获取这些过程的,具体可以参考:http://jingyan..com/article/03b2f78c1d6ede5ea237aed7.html
⑻ 有关armcc编译器的问题
如在如下子目录中:d:\new\01
可用下述命令:armcc d:\new\01\filename.c
[格式]有多长写多长,后边加个:\<文件名>
⑼ 为什么 gcc能编译它 cc编译出错
从名字上看,老的unix系统的CC程序叫做C Compiler。但GCC这个名字按GNU的说法叫做Gnu Compiler Collection。因为gcc包含很多编译器(C, C++, Objective-C, Ada, Fortran,and Java)。所以它们是不一样的,一个是一个古老的C编译器,一个是编译器的Gnu的编译器的集合(Gcc里的C编译器比CC强大太多了,所以你没必要用CC)。当你调用gcc时不一定是调用的C/C++编译器,是gcc根据文件扩展名自动识别并调用对应的编译器,具体可查阅$man gcc。