濡備綍浣跨敤gcc缂栬瘧鍣

濡備綍浣跨敤gcc缂栬瘧鍣?

鎽樿:

瑕佹兂璇绘噦鏈枃锛屼綘闇€瑕佸C璇█鏈夊熀鏈殑浜嗚В锛屾湰鏂囧皢浠嬬粛濡備綍浣跨敤gcc缂栬瘧鍣ㄣ€?棣栧厛锛屾垜浠粙缁嶅浣曞湪鍛戒护琛屾柟寮忎笅浣跨敤缂栬瘧鍣ㄧ紪璇戠畝鍗曠殑C婧愪唬鐮併€?鐒跺悗锛屾垜浠畝瑕佷粙缁嶄竴涓嬬紪璇戝櫒绌剁珶浣滀簡閭d簺宸ヤ綔锛屼互鍙婂浣曟帶鍒剁紪璇戣繃绋嬨€?鎴戜滑涔熺畝瑕佷粙缁嶄簡璋冭瘯鍣ㄧ殑浣跨敤鏂规硶銆?/p>

GCC rules

浣犺兘鎯宠薄浣跨敤灏侀棴婧愪唬鐮佺殑绉佹湁缂栬瘧鍣ㄧ紪璇戣嚜鐢辫蒋浠跺悧锛熶綘鎬庝箞鐭ラ亾缂栬瘧鍣ㄥ湪浣犵殑 鍙墽琛屾枃浠朵腑鍔犲叆浜嗕粈涔堬紵鍙兘浼氬姞鍏ュ悇绉嶅悗闂ㄥ拰鏈ㄩ┈銆侹en Thompson鏄竴涓憲鍚?鐨勯粦瀹紝浠栫紪鍐欎簡涓€涓紪璇戝櫒锛屽綋缂栬瘧鍣ㄧ紪璇戣嚜宸辨椂锛屽氨鍦?login'绋嬪簭涓暀涓嬪悗闂?鍜屾案涔呯殑鏈ㄩ┈銆傝鍒?杩欓噷 闃呰浠栧 杩欎釜鏉颁綔鐨勬弿杩般€傚垢杩愮殑鏄紝鎴戜滑鏈変簡gcc銆傚綋浣犺繘琛? configure; make; make install 鏃讹紝 gcc鍦ㄥ箷鍚庡仛浜嗗緢澶氱箒閲嶇殑宸ヤ綔銆傚浣曟墠鑳借gcc涓烘垜浠伐浣滃憿锛熸垜浠皢寮€濮嬬紪鍐欎竴涓焊鐗屾父鎴忥紝 涓嶈繃鎴戜滑鍙槸涓轰簡婕旂ず缂栬瘧鍣ㄧ殑鍔熻兘锛屾墍浠ュ敖鍙兘鍦扮簿绠€浜嗕唬鐮併€?鎴戜滑灏嗕粠澶村紑濮嬩竴姝ヤ竴姝ュ湴鍋氾紝浠ヤ究鐞嗚В缂栬瘧杩囩▼锛屼簡瑙d负浜嗗埗浣滃彲鎵ц鏂囦欢闇€瑕?鍋氫簺浠€涔堬紝鎸変粈涔堥『搴忓仛銆傛垜浠皢鐪嬬湅濡備綍缂栬瘧C绋嬪簭锛屼互鍙婂浣曚娇鐢ㄧ紪璇戦€夐」 璁ゞcc鎸夌収鎴戜滑鐨勮姹傚伐浣溿€傛楠わ紙浠ュ強鎵€鐢ㄥ伐鍏凤級濡備笅锛? 棰勭紪璇? (gcc -E)锛? 缂栬瘧 (gcc)锛? 姹囩紪 (as)锛屽拰 杩炴帴 (ld)銆?/p>

寮€濮?..

棣栧厛锛屾垜浠簲璇ョ煡閬撳浣曡皟鐢ㄧ紪璇戝櫒銆傚疄闄呬笂锛岃繖寰堢畝鍗曘€傛垜浠皢浠庨偅涓憲鍚嶇殑绗竴涓狢绋嬪簭寮€濮嬨€?锛堝悇浣嶈€佸墠杈堬紝璇峰師璋呮垜锛夈€?/p>

#include <stdio.h>

int main()
{
  printf("Hello World!\n");
}

鎶婅繖涓枃浠朵繚瀛樹负 game.c銆?浣犲彲浠ュ湪鍛戒护琛屼笅缂栬瘧瀹冿細

gcc game.c

鍦ㄩ粯璁ゆ儏鍐典笅锛孋缂栬瘧鍣ㄥ皢鐢熸垚涓€涓悕涓?a.out 鐨勫彲鎵ц鏂囦欢銆?浣犲彲浠ラ敭鍏ュ涓嬪懡浠よ繍琛屽畠锛?/span>

a.out

Hello World

姣忎竴娆$紪璇戠▼搴忔椂锛屾柊鐨?a.out 灏嗚鐩栧師鏉ョ殑绋嬪簭銆備綘鏃犳硶鐭ラ亾鏄摢涓?绋嬪簭鍒涘缓浜?a.out銆傛垜浠彲浠ラ€氳繃浣跨敤 -o 缂栬瘧閫夐」锛屽憡璇?gcc鎴戜滑鎯虫妸鍙墽琛屾枃浠跺彨浠€涔堝悕瀛椼€傛垜浠皢鎶婅繖涓▼搴忓彨鍋?game锛屾垜浠?鍙互浣跨敤浠讳綍鍚嶅瓧锛屽洜涓篊娌℃湁Java閭f牱鐨勫懡鍚嶉檺鍒躲€?/span>

gcc -o game game.c

game
Hello World

鍒扮幇鍦ㄤ负姝紝鎴戜滑绂讳竴涓湁鐢ㄧ殑绋嬪簭杩樺樊寰楀緢杩溿€傚鏋滀綘瑙夊緱娌抚锛屼綘鍙互鎯充竴鎯虫垜浠?宸茬粡缂栬瘧骞惰繍琛屼簡涓€涓▼搴忋€傚洜涓烘垜浠皢涓€鐐逛竴鐐逛负杩欎釜绋嬪簭娣诲姞鍔熻兘锛屾墍浠ユ垜浠繀椤?淇濊瘉璁╁畠鑳藉杩愯銆備技涔庢瘡涓垰寮€濮嬪缂栫▼鐨勭▼搴忓憳閮芥兂涓€涓嬪瓙缂栦竴涓?000琛岀殑绋嬪簭锛?鐒跺悗涓€娆′慨鏀规墍鏈夌殑閿欒銆傛病鏈変汉锛屾垜鏄娌℃湁浜猴紝鑳藉仛鍒拌繖涓€備綘搴旇鍏堢紪涓€涓彲浠?杩愯鐨勫皬绋嬪簭锛屼慨鏀瑰畠锛岀劧鍚庡啀娆¤瀹冭繍琛屻€傝繖鍙互闄愬埗浣犱竴娆′慨鏀圭殑閿欒鏁伴噺銆傚彟澶栵紝 浣犵煡閬撳垰鎵嶅仛浜嗗摢浜涗慨鏀逛娇绋嬪簭鏃犳硶杩愯锛屽洜姝や綘鐭ラ亾搴旇鎶婃敞鎰忓姏鏀惧湪鍝噷銆傝繖鍙互 闃叉杩欐牱鐨勬儏鍐靛嚭鐜帮細浣犺涓轰綘缂栧啓鐨勪笢瑗垮簲璇ヨ兘澶熷伐浣滐紝瀹冧篃鑳介€氳繃缂栬瘧锛屼絾瀹冨氨鏄?涓嶈兘杩愯銆傝鍒囪锛岃兘澶熼€氳繃缂栬瘧鐨勭▼搴忓苟涓嶆剰鍛崇潃瀹冩槸姝g‘鐨勩€?/p>

涓嬩竴姝ヤ负鎴戜滑鐨勬父鎴忕紪鍐欎竴涓ご鏂囦欢銆傚ご鏂囦欢鎶婃暟鎹被鍨嬪拰鍑芥暟澹版槑闆嗕腑鍒颁簡涓€澶勩€?杩欏彲浠ヤ繚璇佹暟鎹粨鏋勫畾涔夌殑涓€鑷存€э紝浠ヤ究绋嬪簭鐨勬瘡涓€閮ㄥ垎閮借兘浠ュ悓鏍风殑鏂瑰紡鐪嬪緟涓€鍒囦簨鎯呫€?/p>

#ifndef DECK_H
#define DECK_H

#define DECKSIZE 52

typedef struct deck_t
{
  int card[DECKSIZE];
  /* number of cards used */
  int dealt;
}deck_t;

#endif /* DECK_H */

鎶婅繖涓枃浠朵繚瀛樹负 deck.h銆傚彧鑳界紪璇?.c 鏂囦欢锛?鎵€浠ユ垜浠繀椤讳慨鏀?game.c銆傚湪game.c鐨勭2琛岋紝鍐欎笂 #include "deck.h"銆?鍦ㄧ5琛屽啓涓?deck_t deck;銆備负浜嗕繚璇佹垜浠病鏈夋悶閿欙紝鎶婂畠閲嶆柊缂栬瘧涓€娆°€?/p>

gcc -o game game.c

濡傛灉娌℃湁閿欒锛屽氨娌℃湁闂銆傚鏋滅紪璇戜笉鑳介€氳繃锛岄偅涔堝氨淇敼瀹冪洿鍒拌兘閫氳繃涓烘銆?/p>

棰勭紪璇?/h2>

缂栬瘧鍣ㄦ槸鎬庝箞鐭ラ亾 deck_t 绫诲瀷鏄粈涔堢殑鍛紵鍥犱负鍦ㄩ缂栬瘧鏈熼棿锛?瀹冨疄闄呬笂鎶?deck.h"鏂囦欢澶嶅埗鍒颁簡"game.c"鏂囦欢涓€傛簮浠g爜涓殑棰勭紪璇戞寚绀轰互"#"涓哄墠缂€銆?浣犲彲浠ラ€氳繃鍦╣cc鍚庡姞涓?-E 閫夐」鏉ヨ皟鐢ㄩ缂栬瘧鍣ㄣ€?/p>

gcc -E -o game_precompile.txt game.c
wc -l game_precompile.txt
  3199 game_precompile.txt

鍑犱箮鏈?200琛岀殑杈撳嚭锛佸叾涓ぇ澶氭暟鏉ヨ嚜 stdio.h 鍖呭惈鏂囦欢锛屼絾鏄鏋?浣犳煡鐪嬭繖涓枃浠剁殑璇濓紝鎴戜滑鐨勫0鏄庝篃鍦ㄩ偅閲屻€傚鏋滀綘涓嶇敤 -o 閫夐」鎸囧畾 杈撳嚭鏂囦欢鍚嶇殑璇濓紝瀹冨氨杈撳嚭鍒版帶鍒跺彴銆傞缂栬瘧杩囩▼閫氳繃瀹屾垚涓変釜涓昏浠诲姟缁欎簡浠g爜寰堝ぇ鐨?鐏垫椿鎬с€?/span>

  1. 鎶?include"鐨勬枃浠舵嫹璐濆埌瑕佺紪璇戠殑婧愭枃浠朵腑銆?/li>
  2. 鐢ㄥ疄闄呭€兼浛浠?define"鐨勬枃鏈€?/li>
  3. 鍦ㄨ皟鐢ㄥ畯鐨勫湴鏂硅繘琛屽畯鏇挎崲銆?/li>

杩欏氨浣夸綘鑳藉鍦ㄦ暣涓簮鏂囦欢涓娇鐢ㄧ鍙峰父閲忥紙鍗崇敤DECKSIZE琛ㄧず涓€浠樼墝涓殑绾哥墝鏁伴噺锛夛紝 鑰岀鍙峰父閲忔槸鍦ㄤ竴涓湴鏂瑰畾涔夌殑锛屽鏋滃畠鐨勫€煎彂鐢熶簡鍙樺寲锛屾墍鏈変娇鐢ㄧ鍙峰父閲忕殑鍦版柟 閮借兘鑷姩鏇存柊銆傚湪瀹炶返涓紝浣犲嚑涔庝笉闇€瑕佸崟鐙娇鐢?-E 閫夐」锛岃€屾槸璁╁畠 鎶婅緭鍑轰紶閫佺粰缂栬瘧鍣ㄣ€?聽

缂栬瘧

浣滀负涓€涓腑闂存楠わ紝gcc鎶婁綘鐨勪唬鐮佺炕璇戞垚姹囩紪璇█銆傚畠涓€瀹氳杩欐牱鍋氾紝瀹冨繀椤婚€氳繃鍒嗘瀽 浣犵殑浠g爜鎼炴竻妤氫綘绌剁珶鎯宠鍋氫粈涔堛€傚鏋滀綘鐘簡璇硶閿欒锛屽畠灏变細鍛婅瘔浣狅紝杩欐牱缂栬瘧灏卞け璐ヤ簡銆?浜轰滑鏈夋椂浼氭妸杩欎竴姝ヨ瑙d负鏁翠釜杩囩▼銆備絾鏄紝瀹為檯涓婅繕鏈夎澶氬伐浣滆gcc鍘诲仛鍛€?/p>

姹囩紪

as 鎶婃眹缂栬瑷€浠g爜杞崲涓虹洰鏍囦唬鐮併€備簨瀹炰笂鐩爣浠g爜骞朵笉鑳藉湪CPU涓婅繍琛岋紝 浣嗗畠绂诲畬鎴愬凡缁忓緢杩戜簡銆傜紪璇戝櫒閫夐」 -c 鎶?.c 鏂囦欢杞崲涓轰互 .o 涓烘墿灞曞悕 鐨勭洰鏍囨枃浠躲€?濡傛灉鎴戜滑杩愯

gcc -c game.c

鎴戜滑灏辫嚜鍔ㄥ垱寤轰簡涓€涓悕涓篻ame.o鐨勬枃浠躲€傝繖閲屾垜浠鍒颁簡涓€涓噸瑕佺殑闂銆傛垜浠彲浠ョ敤 浠绘剰涓€涓?.c 鏂囦欢鍒涘缓涓€涓洰鏍囨枃浠躲€傛濡傛垜浠湪涓嬮潰鎵€鐪嬪埌鐨勶紝鍦ㄨ繛鎺ユ楠や腑鎴戜滑鍙互 鎶婅繖浜涚洰鏍囨枃浠剁粍鍚堟垚鍙墽琛屾枃浠躲€傝鎴戜滑缁х画浠嬬粛鎴戜滑鐨勪緥瀛愩€傚洜涓烘垜浠鍦ㄧ紪鍐欎竴涓?绾哥墝娓告垙锛屾垜浠凡缁忔妸涓€浠樼墝瀹氫箟涓?deck_t锛屾垜浠皢缂栧啓涓€涓礂鐗屽嚱鏁般€?杩欎釜鍑芥暟鎺ュ彈涓€涓寚鍚慸eck绫诲瀷鐨勬寚閽堬紝骞舵妸涓€浠橀殢鏈虹殑鐗岃鍏eck绫诲瀷銆傚畠浣跨敤'drawn' 鏁扮粍璺熻釜璁板綍閭d簺鐗屽凡缁忕敤杩囦簡銆傝繖涓叿鏈塂ECKSIZE涓厓绱犵殑鏁扮粍鍙互闃叉鎴戜滑閲嶅浣跨敤 涓€寮犵墝銆?/span>

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "deck.h"

static time_t seed = 0;

void shuffle(deck_t *pdeck)
{
  /* Keeps track of what numbers have been used */
  int drawn[DECKSIZE] = {0};
  int i;

  /* One time initialization of rand */
  if(0 == seed)
  {
    seed = time(NULL);
    srand(seed);
  }
  for(i = 0; i < DECKSIZE; i++)
  {
    int value = -1;
    do
    {
      value = rand() % DECKSIZE;
    }
    while(drawn[value] != 0);

    /* mark value as used */
    drawn[value] = 1;

    /* debug statement */
    printf("%i\n", value);
    pdeck->card[i] = value;
  }
  pdeck->dealt = 0;
  return;
}

鎶婅繖涓枃浠朵繚瀛樹负 shuffle.c銆傛垜浠湪杩欎釜浠g爜涓姞鍏ヤ簡涓€鏉¤皟璇曡鍙ワ紝 浠ヤ究杩愯鏃讹紝鑳借緭鍑烘墍浜х敓鐨勭墝鍙枫€傝繖骞舵病鏈変负鎴戜滑鐨勭▼搴忔坊鍔犲姛鑳斤紝浣嗘槸鐜板湪鍒颁簡 鍏抽敭鏃跺埢锛屾垜浠湅鐪嬬┒绔熷彂鐢熶簡浠€涔堛€傚洜涓烘垜浠殑娓告垙杩樺湪鍒濈骇闃舵锛屾垜浠病鏈夊埆鐨?鍔炴硶纭畾鎴戜滑鐨勫嚱鏁版槸鍚﹀疄鐜颁簡鎴戜滑瑕佹眰鐨勫姛鑳姐€備娇鐢ㄩ偅鏉rintf璇彞锛屾垜浠氨鑳藉噯纭?鍦扮煡閬撶幇鍦ㄧ┒绔熷彂鐢熶簡浠€涔堬紝浠ヤ究鍦ㄥ紑濮嬩笅涓€闃舵涔嬪墠鎴戜滑鐭ラ亾鐗屽凡缁忔礂濂戒簡銆傚湪鎴戜滑 瀵瑰畠鐨勫伐浣滄劅鍒版弧鎰忎箣鍚庯紝鎴戜滑鍙互鎶婇偅涓€琛岃鍙ヤ粠浠g爜涓垹鎺夈€傝繖绉嶈皟璇曠▼搴忕殑鎶€鏈?鐪嬭捣鏉ュ緢绮楃硻锛屼絾瀹冧娇鐢ㄦ渶灏戠殑璇彞瀹屾垚浜嗚皟璇曚换鍔°€備互鍚庢垜浠啀浠嬬粛鏇村鏉傜殑璋冭瘯鍣ㄣ€?/p>

璇锋敞鎰忎袱涓棶棰樸€?/span>

  1. 鎴戜滑鐢ㄤ紶鍧€鏂瑰紡浼犻€掑弬鏁帮紝浣犲彲浠ヤ粠'&'锛堝彇鍦板潃锛夋搷浣滅鐪嬪嚭鏉ャ€傝繖鎶婂彉閲忕殑鏈哄櫒鍦板潃 浼犻€掔粰浜嗗嚱鏁帮紝鍥犳鍑芥暟鑷繁灏辫兘鏀瑰彉鍙橀噺鐨勫€笺€備篃鍙互浣跨敤鍏ㄥ眬鍙橀噺缂栧啓绋嬪簭锛屼絾鏄簲璇?灏介噺灏戜娇鐢ㄥ叏灞€鍙橀噺銆傛寚閽堟槸C鐨勪竴涓噸瑕佺粍鎴愰儴鍒嗭紝浣犲簲璇ュ厖鍒嗗湴鐞嗚В瀹冦€?/li>
  2. 鎴戜滑鍦ㄤ竴涓柊鐨?.c 鏂囦欢涓娇鐢ㄥ嚱鏁拌皟鐢ㄣ€傛搷浣滅郴缁熸€绘槸瀵绘壘鍚嶄负'main'鐨勫嚱鏁帮紝骞朵粠 閭i噷寮€濮嬫墽琛屻€?shuffle.c 涓病鏈?main'鍑芥暟锛屽洜姝や笉鑳界紪璇戜负鐙珛鐨勫彲鎵ц鏂囦欢銆?鎴戜滑蹇呴』鎶婂畠涓庡彟涓€涓叿鏈?main'鍑芥暟骞惰皟鐢?shuffle'鐨勭▼搴忕粍鍚堣捣鏉ャ€?/li>

杩愯鍛戒护

gcc -c shuffle.c

骞剁‘瀹氬畠鍒涘缓浜嗕竴涓悕涓?shuffle.o 鐨勬柊鏂囦欢銆傜紪杈慻ame.c鏂囦欢锛屽湪绗?琛岋紝鍦?deck_t绫诲瀷鐨勫彉閲?deck 澹版槑涔嬪悗锛屽姞涓婁笅闈㈣繖涓€琛岋細

shuffle(&deck);

鐜板湪锛屽鏋滄垜浠繕璞′互鍓嶄竴鏍峰垱寤哄彲鎵ц鏂囦欢锛屾垜浠氨浼氬緱鍒颁竴涓敊璇?/span>

gcc -o game game.c

/tmp/ccmiHnJX.o: In function `main':
/tmp/ccmiHnJX.o(.text+0xf): undefined reference to `shuffle'
collect2: ld returned 1 exit status

缂栬瘧鎴愬姛浜嗭紝鍥犱负鎴戜滑鐨勮娉曟槸姝g‘鐨勩€備絾鏄繛鎺ユ楠ゅ嵈澶辫触浜嗭紝鍥犱负 鎴戜滑娌℃湁鍛婅瘔缂栬瘧鍣?shuffle'鍑芥暟鍦ㄥ摢閲屻€?閭d箞锛屽埌搴曚粈涔堟槸杩炴帴锛熸垜浠€庢牱鍛婅瘔缂栬瘧鍣ㄥ埌鍝噷瀵绘壘杩欎釜鍑芥暟鍛紵 聽

杩炴帴

杩炴帴鍣?code>ld锛屼娇鐢ㄤ笅闈㈢殑鍛戒护锛屾帴鍙楀墠闈㈢敱 as 鍒涘缓鐨勭洰鏍囨枃浠跺苟鎶婂畠杞崲涓哄彲鎵ц鏂囦欢

gcc -o game game.o shuffle.o

杩欏皢鎶婁袱涓洰鏍囨枃浠剁粍鍚堣捣鏉ュ苟鍒涘缓鍙墽琛屾枃浠?game銆?/span>

杩炴帴鍣ㄤ粠shuffle.o鐩爣鏂囦欢涓壘鍒?shuffle 鍑芥暟锛屽苟鎶婂畠鍖呮嫭杩涘彲鎵ц鏂囦欢銆?鐩爣鏂囦欢鐨勭湡姝eソ澶勫湪浜庯紝濡傛灉鎴戜滑鎯冲啀娆′娇鐢ㄩ偅涓嚱鏁帮紝鎴戜滑鎵€瑕佸仛鐨勫氨鏄寘鍚?deck.h" 鏂囦欢骞舵妸 shuffle.o 鐩爣鏂囦欢杩炴帴鍒版柊鐨勫彲鎵ц鏂囦欢涓€?/p>

璞¤繖鏍风殑浠g爜閲嶇敤鏄粡甯稿彂鐢熺殑銆傝櫧鐒舵垜浠苟娌℃湁缂栧啓鍓嶉潰浣滀负璋冭瘯璇彞璋冪敤鐨?printf 鍑芥暟锛岃繛鎺ュ櫒鍗磋兘浠庢垜浠敤 #include <stdlib.h> 璇彞鍖呭惈鐨勬枃浠朵腑 鎵惧埌瀹冪殑澹版槑锛屽苟鎶婂瓨鍌ㄥ湪C搴擄紙/lib/libc.so.6锛変腑鐨勭洰鏍囦唬鐮佽繛鎺ヨ繘鏉ャ€?杩欑鏂瑰紡浣挎垜浠彲浠ヤ娇鐢ㄥ凡鑳芥纭伐浣滅殑鍏朵粬浜虹殑鍑芥暟锛屽彧鍏冲績鎴戜滑鎵€瑕佽В鍐崇殑闂銆?杩欏氨鏄负浠€涔堝ご鏂囦欢涓竴鑸彧鍚湁鏁版嵁鍜屽嚱鏁板0鏄庯紝鑰屾病鏈夊嚱鏁颁綋銆備竴鑸紝浣犲彲浠ヤ负 杩炴帴鍣ㄥ垱寤虹洰鏍囨枃浠舵垨鍑芥暟搴擄紝浠ヤ究杩炴帴杩涘彲鎵ц鏂囦欢銆傛垜浠殑浠g爜鍙兘浜х敓闂锛屽洜涓?鍦ㄥご鏂囦欢涓垜浠病鏈夋斁鍏ヤ换浣曞嚱鏁板0鏄庛€備负浜嗙‘淇濅竴鍒囬『鍒╋紝鎴戜滑杩樿兘鍋氫粈涔堝憿锛?/p>

鍙﹀涓や釜閲嶈閫夐」

-Wall 閫夐」鍙互鎵撳紑鎵€鏈夌被鍨嬬殑璇硶璀﹀憡锛屼互渚垮府鍔╂垜浠‘瀹氫唬鐮佹槸姝g‘鐨勶紝 骞朵笖灏藉彲鑳藉疄鐜板彲绉绘鎬с€傚綋鎴戜滑浣跨敤杩欎釜閫夐」缂栬瘧鎴戜滑鐨勪唬鐮佹椂锛屾垜浠皢鐪嬪埌涓嬭堪璀﹀憡锛?/p>

game.c:9: warning: implicit declaration of function `shuffle'

杩欒鎴戜滑鐭ラ亾杩樻湁涓€浜涘伐浣滆鍋氥€傛垜浠渶瑕佸湪澶存枃浠朵腑鍔犲叆涓€琛屼唬鐮侊紝浠ヤ究鍛婅瘔缂栬瘧鍣ㄦ湁鍏?shuffle 鍑芥暟鐨勪竴鍒囷紝璁╁畠鍙互鍋氬繀瑕佺殑妫€鏌ャ€傚惉璧锋潵璞℃槸涓€绉嶇嫛杈╋紝浣嗚繖鏍峰仛 鍙互鎶婂嚱鏁扮殑瀹氫箟涓庡疄鐜板垎绂诲紑鏉ワ紝浣挎垜浠兘鍦ㄤ换浣曞湴鏂逛娇鐢ㄦ垜浠殑鍑芥暟锛屽彧瑕佸寘鍚柊鐨勫ご鏂囦欢 骞舵妸瀹冭繛鎺ュ埌鎴戜滑鐨勭洰鏍囨枃浠朵腑灏卞彲浠ヤ簡銆備笅闈㈡垜浠氨鎶婅繖涓€琛屽姞鍏eck.h涓€?/span>

void shuffle(deck_t *pdeck);

杩欏氨鍙互娑堥櫎閭d釜璀﹀憡淇℃伅浜嗐€?/span>

鍙︿竴涓父鐢ㄧ紪璇戝櫒閫夐」鏄紭鍖栭€夐」 -O# (鍗?-O2)銆?杩欐槸鍛婅瘔缂栬瘧鍣ㄤ綘闇€瑕佷粈涔堢骇鍒殑浼樺寲銆傜紪璇戝櫒鍏锋湁涓€鏁村鎶€宸у彲浠ヤ娇浣犵殑浠g爜杩愯寰楁洿蹇竴鐐广€?瀵逛簬璞℃垜浠繖绉嶅皬绋嬪簭锛屼綘鍙兘娉ㄦ剰涓嶅埌宸埆锛屼絾瀵逛簬澶у瀷绋嬪簭鏉ヨ锛屽畠鍙互澶у箙搴︽彁楂樿繍琛岄€熷害銆?浣犱細缁忓父纰板埌瀹冿紝鎵€浠ヤ綘搴旇鐭ラ亾瀹冪殑鎰忔€濄€?/p>

璋冭瘯

鎴戜滑閮界煡閬擄紝浠g爜閫氳繃浜嗙紪璇戝苟涓嶆剰鍛崇潃瀹冩寜鎴戜滑寰楄姹傚伐浣滀簡銆備綘鍙互浣跨敤涓嬮潰鐨勫懡浠ら獙璇?鏄惁鎵€鏈夌殑鍙风爜閮借浣跨敤浜?/p>

game | sort - n | less

骞朵笖妫€鏌ユ湁娌℃湁閬楁紡銆傚鏋滄湁闂鎴戜滑璇ユ€庝箞鍔烇紵鎴戜滑濡備綍鎵嶈兘娣卞叆搴曞眰鏌ユ壘閿欒鍛紵 浣犲彲浠ヤ娇鐢ㄨ皟璇曞櫒妫€鏌ヤ綘鐨勪唬鐮併€傚ぇ澶氭暟鍙戣鐗堥兘鎻愪緵钁楀悕鐨勮皟璇曞櫒锛歡db銆傚鏋滈偅浜涗紬澶氱殑鍛戒护琛岄€夐」 璁╀綘鎰熷埌鏃犳墍閫備粠锛岄偅涔堜綘鍙互浣跨敤KDE鎻愪緵鐨勪竴涓緢濂界殑鍓嶇宸ュ叿 KDbg銆?杩樻湁涓€浜涘叾瀹冪殑鍓嶇宸ュ叿锛屽畠浠兘寰堢浉浼笺€傝寮€濮嬭皟璇曪紝浣犲彲浠ラ€夋嫨 File->Executable 鐒跺悗鎵惧埌浣犵殑 game 绋嬪簭銆?褰撲綘鎸変笅F5閿垨閫夋嫨 Execution->浠庤彍鍗曡繍琛屾椂锛屼綘鍙互鍦ㄥ彟涓€涓獥鍙d腑鐪嬪埌杈撳嚭銆?鎬庝箞鍥炰簨锛熷湪閭d釜绐楀彛涓垜浠粈涔堜篃鐪嬩笉鍒般€備笉瑕佹媴蹇冿紝KDbg娌℃湁鍑洪棶棰樸€傞棶棰樺湪浜庢垜浠?鍦ㄥ彲鎵ц鏂囦欢涓病鏈夊姞鍏ヤ换浣曡皟璇曚俊鎭紝鎵€浠Dbg涓嶈兘鍛婅瘔鎴戜滑鍐呴儴鍙戠敓浜嗕粈涔堛€傜紪璇戝櫒閫夐」 -g 鍙互鎶婂繀瑕佺殑璋冭瘯淇℃伅鍔犲叆鐩爣鏂囦欢銆備綘蹇呴』鐢ㄨ繖涓€夐」缂栬瘧鐩爣鏂囦欢 锛堟墿灞曞悕涓?o锛夛紝鎵€浠ュ懡浠よ鎴愪簡锛?/span>

gcc -g -c shuffle.c game.c
gcc -g -o game game.o shuffle.o

杩欏氨鎶婇挬瀛愭斁鍏ヤ簡鍙墽琛屾枃浠讹紝浣縢db鍜孠Dbg鑳芥寚鍑鸿繍琛屾儏鍐点€傝皟璇曟槸涓€绉嶅緢閲嶈鐨勬妧鏈紝寰?鍊煎緱浣犺姳鏃堕棿瀛︿範濡備綍浣跨敤銆傝皟璇曞櫒甯姪绋嬪簭鍛樼殑鏂规硶鏄畠鑳藉湪婧愪唬鐮佷腑璁剧疆鈥滄柇鐐光€濄€傜幇鍦ㄤ綘鍙互 鐢ㄥ彸閿崟鍑昏皟鐢?shuffle 鍑芥暟鐨勯偅琛屼唬鐮侊紝璇曠潃璁剧疆鏂偣銆傞偅涓€琛岃竟涓婁細鍑虹幇涓€涓?绾㈣壊鐨勫皬鍦嗗湀銆傜幇鍦ㄥ綋浣犳寜涓婩5閿椂锛岀▼搴忓氨浼氬湪閭d竴琛屽仠姝㈡墽琛屻€傛寜F8鍙互璺冲叆shuffle鍑芥暟銆?鍛碉紝鎴戜滑鐜板湪鍙互鐪嬪埌 shuffle.c 涓殑浠g爜浜嗭紒鎴戜滑鍙互鎺у埗绋嬪簭涓€姝ヤ竴姝ュ湴鎵ц锛?骞剁湅鍒扮┒绔熷彂鐢熶簡浠€涔堜簨銆傚鏋滀綘鎶婂厜鏍囨殏鍋滃湪灞€閮ㄥ彉閲忎笂锛屼綘灏嗚兘鐪嬪埌鍙橀噺鐨勫唴瀹广€?澶ソ浜嗐€傝繖姣旈偅鏉?printf 璇彞濂藉浜嗭紝鏄笉鏄紵 聽

灏忕粨

鏈枃澶т綋浠嬬粛浜嗙紪璇戝拰璋冭瘯C绋嬪簭鐨勬柟娉曘€傛垜浠璁轰簡缂栬瘧鍣ㄨ蛋杩囩殑姝ラ锛屼互鍙婁负浜嗚 缂栬瘧鍣ㄥ仛杩欎簺宸ヤ綔搴旇缁檊cc浼犻€掑摢浜涢€夐」銆傛垜浠畝杩颁簡鏈夊叧杩炴帴鍏变韩鍑芥暟搴撶殑闂锛?鏈€鍚庝粙缁嶄簡璋冭瘯鍣ㄣ€傜湡姝d簡瑙d綘鎵€浠庝簨鐨勫伐浣滆繕闇€瑕佷粯鍑鸿澶氬姫鍔涳紝浣嗘垜甯屾湜鏈枃 鑳借浣犳纭湴璧锋銆備綘鍙互鍦?gcc銆?as 鍜?ld鐨?man 鍜?info page涓?鎵惧埌鏇村鐨勪俊鎭€?/p>

鑷繁缂栧啓浠g爜鍙互璁╀綘瀛﹀埌鏇村鐨勪笢瑗裤€備綔涓虹粌涔犱綘鍙互浠ユ湰鏂囩殑绾哥墝娓告垙涓哄熀纭€锛岀紪鍐?涓€涓?1鐐规父鎴忋€傞偅鏃朵綘鍙互瀛﹀濡備綍浣跨敤璋冭瘯鍣ㄣ€備娇鐢℅UI鐨凨Dbg寮€濮嬪彲浠ユ洿瀹规槗涓€浜涖€?濡傛灉浣犳瘡娆″彧鍔犲叆涓€鐐圭偣鍔熻兘锛岄偅涔堝緢蹇氨鑳藉畬鎴愩€傚垏璁帮紝涓€瀹氳淇濇寔绋嬪簭涓€鐩磋兘杩愯锛?/p>

瑕佹兂缂栧啓涓€涓畬鏁寸殑娓告垙锛屼綘闇€瑕佷笅闈㈣繖浜涘唴瀹癸細

  • 涓€涓焊鐗岀帺瀹剁殑瀹氫箟锛堝嵆锛屼綘鍙互鎶奷eck_t瀹氫箟涓簆layer_t锛夈€?/li>
  • 涓€涓粰鎸囧畾鐜╁鍙戜竴瀹氭暟閲忕墝鐨勫嚱鏁般€傝浣忓湪绾哥墝涓澧炲姞鈥滃凡鍙戠墝鈥濈殑鏁伴噺锛屼互渚?鑳界煡閬撹繕鏈夐偅浜涚墝鍙彂銆傝繕瑕佽浣忕帺瀹舵墜涓繕鏈夊灏戠墝銆?/li>
  • 涓€浜涗笌鐢ㄦ埛鐨勪氦浜掞紝闂棶鐜╁鏄惁杩樿鍙︿竴寮犵墝銆?/li>
  • 涓€涓兘鎵撳嵃鐜╁鎵嬩腑鐨勭墝鐨勫嚱鏁般€?card 绛変簬value % 13 锛堝緱鏁颁负0鍒?2锛夛紝suit 绛変簬 value / 13 锛堝緱鏁颁负0鍒?锛夈€?/li>
  • 涓€涓兘纭畾鐜╁鎵嬩腑鐨剉alue鐨勫嚱鏁般€侫ce鐨剉alue涓洪浂骞朵笖鍙互绛変簬1鎴?1銆侹ing鐨剉alue涓?2骞朵笖鍙互绛変簬10銆?/li>