이코드가 왜 에러가 안나는거죠? enum의 정의에 혼란이 오는군요

gloomyr의 이미지

#include <stdio.h>
typedef enum aa
{
    a = 0,
    b = 1
}aa;
 
typedef enum bb
{
    c = 0,
    d = 1
}bb;
 
int main()
{
    aa a;
    a = c;
 
    printf("a : %d\n", a);
    return 0;
}

이게 왜 에러가 안나는거죠?
bb 에 있는 c가 aa a 에 대입이 되는건 뭔일이죠??
????

gloomyr의 이미지

visual c++에서는 안되고 gcc에서는 컴파일이 되네요
-W -Wall 옵션주고도 말이죠.. 머죠 이건??

ktd2004의 이미지

아마 g++에서는 에러가 나지 않을까요?

g++ -W -Wall a.cpp
gloomyr의 이미지

g++에서는 에러가 나네요.
왜 gcc로는.. 에러가 안날까요
.cpp 가아닌 .c 파일은 규칙이 느슨한가요??

.c 규칙에는 저문법이 허용되는 이유가 도대체 무엇인가요!!-__-;

shint의 이미지

확장자를 .c 로 바꿔보세요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

klara의 이미지

C에서 자주 있는 암묵적 형변환입니다.
C++에서도 명시적으로 형변환해주면 컴파일됩니다.

shint의 이미지

말씀하신대로
a = (aa)c;
요렇게 해보니 되네요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

gloomyr의 이미지

그렇군요 형변환 ㅋㅋㅋ
생각도 못했습니다. 헐 퀴..
이렇게 암묵적인 형변환의 폐혜를 체험하게되네요 ㅋㅋ

감사합니다. 솨악 시원하게 뚤렸네요