2012-05-03 41 views
0

我有其設定基於另一變量的變量的函數。爲不同的變量條件檢查

if(!button_x.on) 
    button_x.on = 1; 
if(!button_y.on) 
    button_y.on = 1; 
if(!button_z.on) 
    button_z.on = 1; 
. 
. 
. 

如果它是x,y,z,...。僅在運行時確定。對於不同的(100個)不同情況具有多種這樣的條件看起來不太好。在C中有更好的方法去解決這個問題嗎?


編輯: 我應該更好地誣陷我上面的例子。

if (!structureA.visited)    
    visit_structureA(); // does some operation 
if (!structureB.visited)    
visit_structureB(); 
if (!structureC.visited)    
visit_structureC(); 

。 。 。

結構的數量和結構的名稱沒有在編譯時已知的。但結構名稱遵循上面顯示的特定模式。它只在運行時才知道。 我嘗試使用宏是這樣的:

#define VISIT(str) \ 
    if (!structure##str.visited) \ 
     visit_structure##str(); 

//In the function: 
// str = 'known at runtime' 
    VISIT(str); 

,但這不會爲預處理器指令在編譯時更換,而不是運行時明顯的原因工作。我不確定是否有更好的方法呢?

+2

「按鈕[i]」的數組? –

+0

你需要在狀態之間切換嗎?即,如果它是ON,則將其關閉,反之亦然。 – Mahesh

回答

1

在你的榜樣,您可以根據相同的變量,而不是另外一個設置變量的值,如果是這樣的話,你想改變它從0到1,反之亦然,你可以不用條件:

button_x.on = !button_x.on; 

如果你有很多那些行爲的想法一樣,可以考慮使用數組和itertating它。

+0

我會說,正是這一點,如果OP同意我的意見:) – Mahesh

1

在C中,下面的條件:

if (!x) 
    x = 1; 

相當於:

x = 1; 

如果變量是布爾型(開/關),這是我假定是這種情況,如果我們說關於按鈕。

+1

不完全,即當'X = 2' – MByD

+0

+1,該結構成員的名字似乎暗示是boolean值,並在這種情況下,條件是開銷。如果該值不是布爾值,則OP應該精確,並且可能會認爲將結構成員的名稱更改爲不那麼容易混淆的名稱。 – ouah

+0

@BinyaminSharet - 請參閱我清楚說明的假設,即變量是布爾值(因爲按鈕習慣於存在)。 –