2016-10-17 3 views
2

구조에서 플래그로 부울 변수를 사용하고 싶었지만 가능하도록하기 위해 "bool"이라는 키워드가 없습니다. 내가 여기에 몇 가지 관련 정보를 가지고 : Using boolean values in C 을 다음 기본적으로, 나는이 줄에 다음과 같은 오류를 얻을이c에서 bool을 사용하여 (구조 내에서)

struct bookshop 
{ 
    char name[20]; 
    char issuer[20]; 
    int id; 
    typedef enum { false, true } flag; 

}; 

을 시도 : "형식 정의 열거 {허위 사실} 플래그를"; '형식 정의' 전에 예상 지정-규정 목록 - -이 라인 에서 여러 마커 유형 '플래그' 확인할 수 없습니다 - 구문 오류를

를 도와주세요! 그리고 미리 감사드립니다.

+2

사용을 구조체 선언하기 전에'typedef'을하고 구조체의 형태의 VAR를 정의 할 수 있다는 것을주의. –

+3

멤버 변수는 유형 별칭이 아닌 구조 내부에서만 선언 할 수 있습니다. 또한 C99 표준 [C에는 boolan 유형이 있습니다] (http://en.cppreference.com/w/c/types/boolean)을 사용할 수 있습니다. –

+2

C99는 부울 유형에'_Bool' 키워드를 도입했습니다. –

답변

1

선언에 새 유형을 정의 할 수 없습니다. 먼저 부울 형식 정의를 선언해야하고 당신은 당신이 그와 같은 구조체 정의의 내부 typedef을 넣을 수 없습니다 그것은 당신의 구조체, 즉 :

typedef enum { false, true } bool; 

struct bookshop 
{ 
    char name[20]; 
    char issuer[20]; 
    int id; 
    bool flag; 
}; 
4

를 사용할 수 있습니다. 그것은 세계적인 수준에 있어야합니다. 사용 가능한 stdbool.h이있는 경우

typedef enum { false, true } bool; 

struct bookshop 
{ 
    char name[20]; 
    char issuer[20]; 
    int id; 
    bool flag; 
}; 

, 당신은 단지를 포함 할 수 있고 그것은 bool 유형뿐만 아니라 truefalse 상수를 제공 할 것입니다.

0

전통적으로, INT 유형은 '부울'값을 저장하는 데 사용되었다 이 아닌 0 값에 대한 사실, 제로 사람을위한 거짓 을.

C99 때문에, 당신은 stdbool.h에 정의 된 매크로와 값을 사용할 수 있습니다

부울 _Bool을 일정

진정한 정수 상수 1

거짓 정수 0

__bool_true_false_are_defined 정수 1

그러나 이전 코드와의 호환성 및 표준 C 테스트 값이 true 또는 false인지 확인하십시오. 앞서 설명했듯이 코드 :

int flag = 4; 

if(flag) { 
    puts("true\n"); 
} 
else { 
    puts("false\n"); 
} 

true입니다.

0

enum 유형의 변수를 선언하려는 경우 구조 정의 내에 typedef을 사용하지 않아야합니다.

typedef는 유형, 사용자 정의 유형을 정의하는 데 사용되며 그 때문에

struct bookshop 
{ 
    char name[20]; 
    char issuer[20]; 
    int id; 
    enum { false, true } flag;  
}; 

이해야 할, 당신은 당신이 차례로 구조의 멤버 변수를 선언하려면, 원하는 아니다 그것.

는 또한 표준 헤더 stdbool.h 그래서 당신이

struct bookshop 
{ 
    char name[20]; 
    char issuer[20]; 
    int id; 
    bool flag;  
}; 
+0

첫 번째 대안에서는'true' 및'false' 열거 형 상수가 정의되어 있지만 열거 형 태그 이름도없고 typedef도 없으므로 해당 유형의 다른 변수를 정의 할 수 없다는 점에 유의하십시오. 그것에 관한 대답을 추가 할 것인지에 대해 토론하고있었습니다. 지금 나는 할 필요가 없다. 또한 원래 'typedef'가 허용 되었다면 타입 이름'flag'을 도입했을 것이고 멤버를 전혀 만들지 않았을 것입니다. 실제로는 허용되지 않으므로 실제로 문제가되지 않습니다. –

관련 문제