日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 与 G++的区别

發布時間:2025/3/15 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 与 G++的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:http://blog.csdn.net/wr_technology/article/details/53414447
?
一、OJ提交題目中的語言選項里G++與C++的區別
http://www.th7.cn/Program/cp/201405/199001.shtml

首先更正一個概念,C++是一門計算機編程語言,G++不是語言,是一款編譯器中編譯C++程序的命令而已。

那么他們之間的區別是什么?

在提交題目中的語言選項里,G++和C++都代表編譯的方式。準確地說,選擇C++的話,意味著你將使用的是最標準的編譯方式,也就是ANSI C++編譯。如果你使用的是G++的話,意味著你將使用GNU項目中最平凡適用人群最多的編譯器(其實也就是我們熟悉的Code::Blocks的自帶的編譯器,Windows環境里一般是MinGW下的gcc,Linux中的gcc和前者基本是一個東西)進行編譯。類似的還有選擇C和GCC,前者是標準C編譯器編譯,后者同樣是用gcc來編譯。

編譯器的差別——編譯器的優化
當然,很多時候我們有的代碼用C++提交通過了,但是G++卻失敗了呢?眾所周知,不同的編譯器,會對代碼做出一些不同的優化。舉一個最簡單的例子。針對單個語句(注意,是單個語句,不是包含在語句中的那種前++和后++):

a: a++;b: ++a;
一般的講,我們都知道,這兩條語句的最終結果是一樣的,就是a自己增加了1。但是,兩者的差距還是有的。如果從標準C的角度去理解。a++這個語句等同于

a: a = a + 1
也就是說,我是先調用,再自增。在調用過程中,會申請一個新的數據地址,用于存放臨時的變量a',然后在把a'加1,之后在把a'賦值給a。

但是++a這個語句不需要這么麻煩。因為他是先自增,后調用,也就是省去了申請新地址的功夫。所以理論上,二者的時間消耗是有差異的,如果你是使用標準C的編譯方式,就可以發現這個差異。畢竟,申請臨時內存這個操作耗費的時間,遠遠比令已知內存的數據進行一個改變要長的多。

但是編譯器的優化就體現在了這種本身結果相同卻耗時有差異的地方。如果你使用gcc來編譯,結果你會發現前++與后++二者基本上沒有差異。這就是編譯器的優化中的冰山一角了。事實上還有很多優化的地方。

為什么G++提交WA了?
好吧回到現實中來。我昨天在做poj 3122這道題的時候,再一次的遇到了G++WA;C++AC的尷尬局面。

為什么呢?其實這個也算是編譯器優化的一部分,那就是精度缺省。

眾所周知,long long類型,作為一個在C/C++11才被確認為基本數據類型的一個數據類型,在不同的環境下,他的類型標識符是不同的。也就是我們津津樂道的%lld 和 %I64d了。同樣,double類型也是一個有趣的類型。double類型其實準確地說是雙精度型,他的內存長度一般是比float類型(單精度型)的多了一倍,有的時候很早的標準里是把double稱為long float的。所以說就有了為什么float類型用%f,double用%lf。但是由于現在不是以前的那種一個內存條就幾兆,多開一個double就會超內存的年代了,所以double還有float在gcc中被自動優化。

在用scanf讀數據時,為了與float區分,使用%lf。

在用printf寫數據時,由于實質上,double和float是同一個類型,只不過內存占用有差異而已,他們的標識符都是%f,注意,這個和標準C不同,這里的都是%f。

當然對于另外一個特殊的類型long double雖然不常用,但是編譯器依舊在支持,這里有個插曲,理論上long double應該是兩倍的double(類似long long和int的關系,因為long和int其實是一個東西)。但是實際上,long double很奇怪的是一個10字節的怪物,他有兩個空余字節,是怎么改動都不會發生變化的。輸入輸出的標識符都是%Lf,大寫的L。

但是這里又有問題了,為什么我在本地用%f會WA,在OJ上用%f會AC?

因為我們本機如果使用的是Windows下的Code::Blocks這款IDE的話,編譯器也就是MinGW這個東西。事實上,為了盡量保持gcc的跨平臺性,MinGW在某些地方是直接用了MSVC的東西的,而對我們影響最大的就是這個標識符的問題。簡單的說,如果你是要在本機測試,那么最好,請使用標準C的那個標識符系統;如果你要提交代碼,那么請改成gcc的那一套標識符系統。

當然還有更簡單的方法,就是直接用輸入輸出流在控制輸入輸出,這樣更省事,而且跨平臺性能更好,不會出現這種因為標識符而出錯的情況。

列個表格出來就是這個樣子的:

double f;?? ?G++提交?? ?C++提交?? ?本機gcc測試?? ?最安全的方法
輸入?? ?scanf("%lf", &f);?? ?scanf("%lf", &f);?? ?scanf("%lf", &f);?? ?cin >> f;
輸出?? ?printf("%f", f);?? ?printf("%lf", f);?? ?printf("%lf", f);?? ?cout << f;
大概就是這么多了,希望大家避免這種錯誤的發生。


二、手動擴大棧內存,讓AC無憂
http://blog.csdn.NET/shahdza/article/details/6586430
還在因為 怕 g++ 提交時間很慢,但是用C++ 交又怕棧溢出???

我們都知道,如果代碼里有 遞歸函數 頻繁調用, 用 C++ 提交代碼, 很可能就會 出現

? ? ?Runtime Error ? ? ? ? ??
(ACCESS_VIOLATION)?

但是用G++提交,如果數據量很多的話,又會出現

? Time Limit Exceeded

那怎么辦呢???

呵呵,G++的話可以用輸入加速外掛啦~~~,以前我介紹過的。?

同樣的C++也可以防止棧溢出!!!

只要在你的代碼里加上下面這句話, OK,棧溢出直接搞定!!!

#pragma comment(linker, "/STACK:102400000,102400000")

三、oj 中G++和C++區別
原創在這里 http://www.cnblogs.com/dongsheng/archive/2012/10/22/2734670.html
1、輸出double類型時,如果采用G++提交,scanf采用%lf,prinf采用%f,否則會報錯

2、使用GCC/G++的提醒:

對于64位整數, long long int 和 __int64 都是支持并且等價的.但是在讀和寫的時候只支持scanf("%I64d", ...)和printf("%I64d", ...).不支持"%lld"是因為MinGW下的GCC和G++使用的msvcrt.dll動態鏈接庫并不支持C99標準. (杭電OJ G++支持"%lld")
根據ISO C++標準,在G++下,main函數的返回值必須是int,否則將會導致Compile Error(編譯錯誤)的判答

3、G++/GCC使用scanf、printf時注意引用<stdio.h>,只引用<iostream>不識別 (杭電OJ G++不需要<stdio.h>)

補充:

__int64與long long 都是在32位平臺開始使用的64位整數的數據類型,在存儲方式和使用方式上沒有區別。
兩者的區別在于,它們命名的發起人不同,支持的平臺不同。long long這個數據類型,是UNIX平臺發起并支持的,而__int64是微軟從win95(VC6)開始發起并支持的,在老的windows開發平臺下(如VC6),不識別long long,而老的UNIX,也不識別_int64。當然,現在比較新的平臺,兩種數據格式和相關的定義、函數都可以兼容了。

同樣,作為64位整數的printf輸出格式定義,也是一樣,微軟使用的是%i64d,而UNIX使用的是%lld以及%llu(無符號64位)等形式。

實際上,無論哪一種,在實際效果上沒有不同,只是因為定義者和使用環境造成的支持或不支持的問題。
而ACM中,編譯識別系統偏向更多的支持微軟系統的定義,因此應該使用__int64和%i64d

總結

以上是生活随笔為你收集整理的C++ 与 G++的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美色图12p | 脱女学生小内内摸了高潮 | 成人免费在线网站 | 欧美freesex黑人又粗又大 | 成熟人妻av无码专区 | 欧美女人交配视频 | 亚洲精品成人网 | 国产aⅴ激情无码久久久无码 | 2023av在线| 双性懵懂美人被强制调教 | 亚州av成人 | 亚洲毛片在线看 | 爱草在线 | 粉嫩av一区二区 | 日本韩国欧美 | 一本久道久久综合无码中文 | 亚洲精品福利视频 | 东京干手机福利视频 | 粉嫩av国产一区二区三区 | 激情天天| 女性裸体下面张开 | 在线精品亚洲欧美日韩国产 | 亚洲高清影院 | 亚洲激情一区二区三区 | av毛片在线免费观看 | 青青久久av北条麻妃黑人 | av中文资源 | 天天插天天透 | 国产区二区 | 狠狠躁夜夜躁 | 日韩欧美成人一区二区三区 | 国产小视频自拍 | 日韩欧美精品一区二区 | 在线亚洲免费 | 国产探花一区二区三区 | 能免费看黄色的网站 | 日日噜噜噜夜夜爽爽狠狠 | 一级片手机在线观看 | 日本一区二区高清视频 | 欧美大色网 | 亚洲第一女人av | 色香蕉影院 | 超碰影院在线 | 国产粉嫩在线观看 | 在线免费看av网站 | 中文字幕一区二区三区乱码人妻 | av免费国产 | 黄色小视频免费观看 | 91精品国产乱码久久 | 中文字幕av不卡 | 久久久久亚洲精品中文字幕 | 日本成人午夜 | 黄瓜视频91 | 黄色片久久久久 | 国产乱码一区二区 | 日本黄色的视频 | 国产一区二区在线观看免费 | www.av欧美 | av男人的天堂网 | 非洲黑人毛片 | 亚洲精品三区 | 欧美成人r级一区二区三区 中文无码一区二区三区在线观看 | 99热官网| 国产又粗又猛又黄视频 | 国产91丝袜在线播放0 | 男女啪啪毛片 | 国产精品视频免费网站 | 国产精品美女久久久 | 午夜一级视频 | 日韩av成人在线 | 人妻换人妻仑乱 | 一级大片免费看 | 国产黄色免费网站 | 黄色网址视频在线观看 | 91高清在线| 亚洲专区中文字幕 | 欧美日韩在线播放视频 | 精品九九九 | 亚洲综合天堂 | 欧美一区二区三区公司 | 日本一区二区三区精品 | 一区二区中文字幕在线观看 | 牛牛视频在线观看 | 欧美久久一区 | 国久久 | 色吧五月天 | 欧美xxxx性 | 亚洲精品国产精品乱码不卡√香蕉 | 干美女av | 天堂色播| 国产欧美日韩在线观看 | 国产欧美亚洲一区二区 | 夜夜嗨av一区二区三区四区 | 91天天干 | 香蕉视频网页 | 一区二区三区免费毛片 | 国产精品高清无码在线观看 | 九七伦理电影 | 桥本有菜aⅴ一区二区三区 在线午夜电影 |