почему и как работает следующий код?
и a, и b имеют внешнюю связь, но могут ли они быть объявлены типами без связи?
если нет, то почему нет конфликта между MyEnum_t в ac и MyEnum_t в bc?
a.h
#ifndef _A_H_
#define _A_H_
void print_a_enum();
#endif
b.h
#ifndef _B_H_
#define _B_H_
void print_b_enum();
#endif
a.c
#include "a.h"
#include <stdio.h>
enum MyEnum{ ONE = 1, TWO = 2};
typedef enum MyEnum MyEnum_t;
MyEnum_t a = ONE;
void print_a_enum()
{
printf("%d\n", a);
}
b.c
#include "b.h"
#include <stdio.h>
enum MyEnum{ ONE = 3, TWO = 4};
typedef enum MyEnum MyEnum_t;
MyEnum_t b = ONE;
void print_b_enum()
{
printf("%d\n", b);
}
main.c
#include "a.h"
#include "b.h"
int main()
{
print_a_enum();
print_b_enum()
}
распечатать: 1 3
gcc версии 4.5.0 20100604 [gcc-4_5-ветка, редакция 160292] (SUSE Linux)
typedef enum{ ONE = 1, TWO } MyEnum;
за один шаг - person Grijesh Chauhan   schedule 23.07.2013