-
概念上:
-
C++是一门计算机编程语言,而G++则是C++的编译器。
-
GCC和G++都是GUN的编译器,cc是Unix系统的C Compiler,而gcc则是GNU Compiler Collection,GNU编译器套装。gcc原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C、C++、Objective-C、Ada、Fortran、Java)。
-
-
提交上的区别:
-
在OJ提交的语言选项中,G++,C++代表 两种编译 的方式。
-
选择C++意味着你将使用C++最标准的编译方式,也就是ANSI C++编译。(补充:更正统)
-
选择G++则意味这你使用GNU项目中适用人群最多的编译器(其实也就是我们熟悉的Code::Blocks 自带的编译器)。
-
类似的还有选择C和GCC,前者是标准的C编译器,后者则是用GCC来编译。
-
-
编译时的差异:
-
编译器优化不同:
举个栗子: ①: a++ ②: ++a
从标准C的角度看:①式是先调用,再自增。在调用过程中,会申请一个新的数据地址,用于存放临时的变量a’,然后在把a’加1,之后在把a’赋值给a。但是②式不会这么麻烦,因为它是先自增,后调用,也就省去了申请新地址的功夫。所以理论上,二者的时间消耗是有差异的。
而如果是使用GCC来编译,那么这两者基本上没有差异。
-
精度缺省:
①long long类型,作为一个在C/C++11才被确认为基本数据类型的一个数据类型,在不同的环境下,他的类型标识符是不同的。也就是我们津津乐道的%lld 和 %I64d了。
②double类型也是一个有趣的类型。double类型其实准确地说是双精度型,他的内存长度一般是比float类型(单精度型)的多了一倍,有的时候很早的标准里是把double称为long float的。所以说就有了为什么float类型用%f,double用%lf。
在用scanf读数据时,为了与float区分,使用%lf。
在用printf写数据时,由于实质上,double和float是同一个类型,只不过内存占用有差异而已,他们的标识符都是%f,注意,这个和标准C不同,这里的都是%f。
列表:
double num G++提交 C++提交 最安全的方法 输入 scanf(“%lf”, &num); scanf(“%lf”, &num); cin >> num; 输出 printf(“%f”, num); printf(“%lf”, num); cout << num; -
补充列表:
-
4.补充
很多ACM的OJ中,语言选GCC就意味着将代码作为.C文件编译。
G++就是GCC这个编译器集合中的C++编译器,只要你代码按标准C++语法写的,不会有什么问题,注意代码中不要调用特定平台下的库函数或API。
用C++代码敲代码,一般都会用C++提交,但是后由于一些细微的不同使用不同的编译方式还是会产生差别的,甚至是WR和AC的天壤之别。
G++是GNU的那个C++编译器,也是Dev-CPP自带的编译器和NOI系列赛官方的编译器。。而C++是VC++,是微软出的编译器
一般来说,两个结果不一样,要么是因为G++效率略低被卡掉,要么是因为写的代码用了C++标准里没规定的东西
提交C语言代码最好使用G++,G++兼容C和C++。C的代码可以用GCC也可用G++提交,而C++的代码不能够用GCC提交,只能用G++。因此最好一个通过不了的两个都试试,编译器的问题有的时候不好找(尤其是遇到long long 类型的和double的输入输出的时候)。
如何避免由于编译器差别带来的错误 (转载)
1、判题系统使用的是G++编译器,和普通使用的TC,VC都有所不同,建议大家使用Dev C++作为IDE,或者用TC和VC写代码,提交前使用Dev C++编译,预防编译错误。
2、G++包含库的时候不要使用iostream.h,应该使用<iostream>
C++注意要使用using namespace std;
3、关于整数,在G++下,long和int是完全一样的。
4、浮点数:使用double以减小误差,格式控制字符串是"%lf"(不要使用float)。浮点数的相等不能直接用==来判断,需要使用实数判等。
5、标识符,G++中有一些在VC中没有的保留字,比如and,or,not等等,使用这些保留字作为标识符会产生CE。
6、对于输入输出,建议不要使用cin和cout,这种输入输出方式会比较慢,在数据量大的时候容易引起超时。
7、关于main函数,定义一定要是int型,并记得加上return 0。
int main(){... return 0; }
8、当使用类似于for (int i=0;i<n;i++)这种形式对循环变量进行定义时,注意循环变量的作用域只在这个循环内。
9、输入法在敲代码和提交代码的时候一定要确保关闭,代码中(除了注释部分)有全角字符会引起CE,注释建议使用英文。
10、使用STL的同学请注意例如下面的声明是会引起CE的
vector<vector<int>> adj; 应该改为 vector<vector<int> > adj;
连续两个左右箭头间要一个空格。
转载来源:
1.http://blog.csdn.net/febr2/article/details/52068357
2.http://www.cnblogs.com/zswbky/p/5432016.html