tft每日頭條

 > 生活

 > gcc編譯器是什麼

gcc編譯器是什麼

生活 更新时间:2025-04-19 15:05:26

問題的由來是我寫了一個排序算法程序,在gcc編譯器下運行,發現結果有問題,然後開展的尋找錯誤解決問題

這是我寫的一個簡單的插入排序算法

#include <stdio.h> //直接插入法排序函數主體 //參數1:待排序的序列 //參數2:序列的長度 //實現從大到小的排序 void insertSort(int array[],int arraySize) { int i , j , tmp,k = 0; for(i = 1 ; i < arraySize ; i ) { tmp = array[i]; j = i - 1; while(j >= 0 && tmp > array[j]) { array[j 1] = array[j--]; } array[j 1] = tmp; } } int main() { int a[7] = {5,6,3,9,2,7,1}; insertSort(a,7); int i = 0; for(i = 0 ; i < 7 ; i ) { printf("%d",a[i]); } printf("\n"); return 0; }

分别在兩個不同的編譯器中去編譯運行,一個是vs2017環境、一個是Linux環境,他們用的編譯器,分别是VS編譯器和gcc編譯器,同樣的代碼,運行出來的結果卻不一樣。

gcc編譯器是什麼(編譯器的差别gcc和VS)1

為了定位問題,于是乎,我在程序體中加了多句printf輸出想查看過程信息

具體代碼我是這樣寫的,可以看一下

#include <stdio.h> //直接插入法排序函數主體 //參數1:待排序的序列 //參數2:序列的長度 //實現從大到小的排序 void insertSort(int array[],int arraySize) { int i , j , tmp,k = 0; for(i = 1 ; i < arraySize ; i ) //循環遍曆序列 { tmp = array[i]; j = i - 1; printf("i = %d , j = %d , temp = %d\n",i,j,tmp); while(j >= 0 && tmp > array[j]) { array[j 1] = array[j--]; } for(k = 0;k<7;k ) { printf("%d",array[k]); } printf("\n"); array[j 1] = tmp; for(k = 0;k<7;k ) { printf("%d",array[k]); } printf("\n"); } } int main() { int a[7] = {5,6,3,9,2,7,1}; insertSort(a,7); int i = 0; printf("最終"); for(i = 0 ; i < 7 ; i ) { printf("%d",a[i]); } printf("\n"); return 0; }

然後下面這是運行的結果,可以發現,第一次從while循環中出來,兩邊的值就不一樣了,while中隻寫了一句話

array[j 1] = array[j--];

好了,問題找到,就是出在這句話上

gcc編譯器是什麼(編譯器的差别gcc和VS)2

于是乎,我們可以知道的是編譯器不同造成的一個差别,并且我懷疑問題出在array[j 1] = array[j--];這句話的j--上,于是上網查閱了相關資料,大體上是這樣說的,我總結在下面了。

在一個循環體之中

gcc編譯器 i 在遇到 '=' 符号時,會先增,而不是在一趟循環結束後再自增的

而VS編譯器,是在一趟循環結束後才會i 的

這應該是gcc編譯器對此做出了自己的優化

所以針對這一塊程序,while裡面我們可以改成這樣,分成兩步走

while(j >= 0 && tmp > array[j]) { array[j 1] = array[j]; j --; }

這下運行結果就沒有問題了

gcc編譯器是什麼(編譯器的差别gcc和VS)3

我精心整理了計算機各個方向的從入門、進階、實戰的視頻課程和電子書,都是技術學習路上必備的經驗,跟着視頻學習是進步最快的,而且所有課程都有源碼,直接跟着去學!!!

資源無套路,跟着學去吧,記得幫我點贊就好

點擊鍊接加入群聊【C語言/C 編程學習基地】:「鍊接」

gcc編譯器是什麼(編譯器的差别gcc和VS)4

gcc編譯器是什麼(編譯器的差别gcc和VS)5

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved