2013-11-05 53 views
0

我是一個新的C程序員,我正在寫作業的一些數據結構。 我在這裏有兩個問題。C - Eclipse CDT - 高效的調試+什麼是更好的代碼(指向函數)?

  1. 我們看到很多C函數指針的例子,通常用於保存代碼重複。我搞砸了這個函數,我最初寫道:

(常量我們pre #defined。縮進也是關閉)。

static PlayerResult playerCheckArguments(const char* name, int age, 
    int attack, int defense) { 
    PlayerResult result = PLAYER_SUCCESS; 
    if (!name) { 
    result = PLAYER_NULL_ARGUMENT; 
    } else if (strlen(name) > PLAYER_MAX_NAME_LENGTH) { 
    result = PLAYER_NAME_TOO_LONG; 
    } else if (invalidAge(age)) { 
    result = PLAYER_INVALID_AGE; 
    } else if (invalidAttack(attack)) { 
    result = PLAYER_INVALID_ATTACK; 
    } else if (invalidDefense(defense)) { 
    result = PLAYER_INVALID_DEFENSE; 
    } 
    return result; 
} 

,直到我得到這個食屍鬼:

static PlayerResult playerCheckArguments(const char* name, int age, int attack, 
    int defense) { 
void* arguments[PLAYER_NUM_OF_PAREMETERS] = { name, &age, &attack, &defense }; 
PlayerResult (*funcArray[PLAYER_NUM_OF_PAREMETERS])(
     int) = {&invalidName, &invalidAge, &invalidAttack, &invalidDefense }; 
PlayerResult result = PLAYER_SUCCESS; 
for (int i = 0; 
     i < PLAYER_NUM_OF_PAREMETERS && result == PLAYER_SUCCESS; i++) { 
    PlayerResult (*func)(int) = funcArray[i]; 
    void* key = arguments[i]; 
    result = func(key); 
} 
return result; 

我的第一個問題的存在 - 沒有任何理由爲什麼我應該使用/寫入第二個功能比其他,一般儘量採用這種「sophistications 「這明顯降低了代碼的清晰度和/或簡單性?

現在,對於我的第二個問題:正如您可能已經注意到的,爲了更容易的調試,我使用了大量局部變量。這樣,我可以看到所有相關的評估,並在運行時有效地監控該程序。 除了使用局部變量之外,還有其他方式可以顯示函數中的表達式嗎?

非常感謝!

返回0 ;-)

+1

由於聲明爲靜態,因此可以內聯。是的:第一個是一次可讀的。 – wildplasser

回答

0

清晰度比聰明要重要得多。越難找到正確的就越難,並且在你不這樣做時進行調試。

使用局部變量進行清晰或調試沒有任何問題。有一個ole鋸「避免過早優化的罪」。讓你的代碼儘可能簡單和清晰。如果你發現沒有足夠的工作來完成作業所需的複雜程度,就可以完成工作。

0

由於您的問題是標籤的編碼風格,我只想說,第一絕對是首選。原因很簡單。向200名程序員展示這兩個函數,100個看第一個,100看第二個,然後記錄程序員能夠描述該函數的平均時間。你絕對會在數百位程序員中取得平均分,發現每一次都贏得第一名。

因此,如果你可能有20多個不同的參數需要檢查,那麼你只能做第二個,即使如此,也有更清晰的方法來做到這一點。我不相信你會看到第二個提速。