2016-03-15 51 views
0

我想用條件運算符來做比較兩個整數值之間簡單的最大/最小值函數,但是我發現當我在全局中使用這些條件運算符時在函數中,它們並不像預期的那樣工作,但是當我在本地使用完全相同的代碼時,它們確實很好。C++條件運算符在全局函數中不能正常工作

在下面的代碼中,我已經嘗試了4種方法(如下面的註釋所示),方法2,3以及4都運行良好,但方法1(它使用與方法4,但全球)只是不會產生正確的結果。

//For method 1 to method 4, pick one and comment out the others. 

#include <iostream> 

//Method 1: Does not work, yields "1,1". 
int max(int a, int b){(a) > (b) ? (a) : (b);} 
int min(int a, int b){(a) < (b) ? (a) : (b);} 

//Method 2: Works well, yields "2,1". 
#define max(x, y) ((x) > (y) ? (x) : (y)) 
#define min(x, y) ((x) < (y) ? (x) : (y)) 

//Method 3: Works well, yields "2,1". 
int max(int a, int b){if(a > b) return a; else return b;} 
int min(int a, int b){if(a < b) return a; else return b;} 

int main(void) 
{ 
    int a = 1, b = 2; 

//Method 4: Works well, yields "2,1". 
int large = ((a) > (b) ? (a) : (b)); 
int small = ((a) < (b) ? (a) : (b)); 

    int large = max(a,b); //Comment out when using Method 4. 
    int small = min(a,b); //Comment out when using Method 4. 

    std::cout << large << "," << small << std::endl; 

    return 0; 
} 
+0

太多的括號在'max'和'min'的身體中。它們只在宏中需要。 –

+0

@PeteBecker我已經修復了他們的代碼。非常感謝! –

+0

請不要編輯問題的解決方案 - 這會讓人們第一次看到問題時感到困惑。相反,將問題留在原來的位置,然後接受其中一個已發佈的答案。 –

回答

3
int max(int a, int b){(a) > (b) ? (a) : (b);} 

你忘了還有 「迴歸」 的聲明。它需要指示從函數返回的值。

你的編譯器應該已經警告過你。特別是在學習C++時,打開所有您可以想到的編譯器診斷信息非常有用。每個編譯器都是值得的,它會抱怨這樣的代碼。

+0

我剛剛在我的編譯器中打開了所有警告選項,正如你所建議的那樣,現在它警告我缺少「返回」!我會保留這些寶貴的警告,非常感謝! –