2012-05-03 2 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

'button [i]'의 배열입니까? –

+0

상태를 전환해야합니까? 즉, ON이면 ON, OFF이면 OFF가된다. – Mahesh

답변

1

예를 들어, 동일한 변수에 따라 변수 값을 설정하고 다른 변수 값이 아닌 경우 변수 값을 0에서 1로 또는 그 반대로 변경하려면 조건없이 수행 할 수 있습니다.

button_x.on = !button_x.on; 

같은 생각을 가진 사람들이 많은 경우 배열을 사용하고 반복 해보십시오. 변수가 부울 우리가 얘기하는 경우 나는 경우가 생각하는 (온/오프) 인 경우

x = 1; 

: C에서

+0

OP가 내 의견에 동의하면 정확히 말했을 것이다. – Mahesh

1

, 다음의 조건 :

if (!x) 
    x = 1; 

은 동일합니다 버튼에 대 한.

+1

정확히 'ie = 2'일 때 – MByD

+0

+1, 구조체 멤버의 이름은 값이 boolean이고 그 경우 조건이 오버 헤드. 값이 부울 값이 아니면 OP는 정확해야하며 구조체 멤버의 이름을 덜 혼동스러운 이름으로 변경한다고 생각할 수 있습니다. – ouah

+0

@BinyaminSharet - 버튼이 존재하는 버릇 인 것처럼 변수가 부울 이었음을 명확하게 설명한 가정을 참조하십시오. –