EnzoFerber
(usa FreeBSD)
Enviado em 19/06/2018 - 16:00h
Acrescentando à resposta anterior:
É possível fazer como você estava fazendo, entretanto, você deve ser explicito:
enum Gender{male, female, gay, flowing_gender};
struct __person{
char complete_name[256];
char cpf[12], rg[10];
enum Gender gender;
}person;
É perfeitamente válido.
typedef serve para definir um tipo de dados, usando
enum Gender você especifica exatamente o tipo de
Gender (como tipo
enum ).
EDIT:
A typedef declaration does not introduce a new type, only a synonym for the type so specified.
*
Já que mencionou o padrão, no
C11 (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf):
Primeiro, sobre declarações (6.7)
6.7 Declarations
declaration:
declaration-specifiers init-declarator-listopt ;
static_assert-declaration
declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt
function-specifier declaration-specifiersopt
alignment-specifier declaration-specifiersopt
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
Note que uma declaração, para ser válida, é composta por pelo menos uma
declaration-specifiers e que este, é composto por, dentre outros,
type-specifier (especificação de tipo). E aí, o que temos a respeito de especificadores de tipo é:
6.7.2 - Type specifiers
type-specifer:
void
char
short
int
long
float
double
signed
unsigned
unsigned
_Bool
_Complex
atomic-type-specifier
struct-or-union-specifier
enum-specifier
typedef-name
As últimas duas linhas respondem sua pergunta. enum-specifer é definido em 6.7.2.2 e tem a forma:
enum-specifier:
enum identifieropt { enumerator-list }
enum identifieropt { enumerator-list , }
enum identifier
Ou seja, para que em C11 você faça uma declaração de uma enum válida, você
precisa incluir a keyword
enum . Caso não queira fazer isso, tem que recorrer à
typedef-name , que é definida em 6.7.8.
Enzo Ferber
[]'s
$ indent -kr -i8 src.c
"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right."
- linux/Documentation/CodingStyle - TORVALDS, Linus.