2016-10-17 2 views
2

Я хотел использовать логическую переменную в c как флаг внутри структуры, но c не имеет ключевого слова «bool», чтобы сделать это возможным. я получил некоторую информацию здесь: Using boolean values in C то в принципе, я попробовал этотusing bool in c (внутри структуры)

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

}; 

получить следующее сообщение об ошибке, в этой строке: «ЬурейеЕ перечисление {ложный, истинный} флаг»; Множественные маркеры на этот линии - ожидаемый спецификатор-квалификационного-листе перед «ЬурейеГо» - Тип «флага» не могут быть решен - ошибка синтаксиса

, пожалуйста, помогите! и спасибо заранее

+2

Используйте 'typedef' перед объявлением структуры и определить вар типа в структуры. –

+3

Вы можете объявлять только переменные-члены внутри структур, а не псевдонимы типов. Кроме того, поскольку стандарт C99 [C имеет тип boolan] (http://en.cppreference.com/w/c/types/boolean), который вы можете использовать. –

+2

В C99 введено ключевое слово '_Bool' для булевых типов. –

ответ

1

Вы не можете определить новый тип объявления. Вы должны сначала объявить Ьоо ЬурейеЕ, а затем вы можете использовать его свой-структуру т.е .:

typedef enum { false, true } bool; 

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

Вы не можете поместить typedef внутри определения структуры, как это. Он должен быть на глобальном уровне.

typedef enum { false, true } bool; 

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

Если у вас есть stdbool.h доступные, вы можете просто включить, что и обеспечит bool типа, а также true и false константы.

0

Традиционно типа INT был использован для хранения «» булевых значений: истинного для ненулевых значений и ложных ноль единиц.

С C99, вы можете использовать макросы и значение, определенные в stdbool.h:

BOOL _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' и не создал бы элемент вообще. Это на самом деле не допускается, так что это не проблема на практике. –

Смежные вопросы