enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
하지만, 오류가 발생하여 컴파일하십시오 아닙니다.
error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here
내가 왜 그래?
enum strategy { RANDOM, IMMEDIATE, SEARCH };
enum strategy my_strategy = IMMEDIATE;
모두 가지고 있는 프로 및 단점. 하지만 계속 한 곳에서 won& # 39 더 말 많은 갈등을 태그 이름공간이 꽂으십시오 식별자입니다 유형, t (stat '와' 상태 '기능을:' 구조체입니다 생각하는 평범한 식별자입니다 바로 볼 수 있는 t # 39, 이러한 don& 인컨텍스트 (충돌), 그리고 it& # 39 에 있는 유형. 하지만, 다른 하나는 짧은 일반 이름공간이 꽂으십시오 식별자입니다 누구이뇨 유형.
이넘 선언 가변입니다 수행되 다음과 같습니다.
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
그러나 '처럼 사용할 수 있습니다' 변수 선언을 메리 페데프 단축할 수 있습니다.
5 858 {{{000}}}
좋은 아이디어 있으면 명명 규칙을 유형 및 com/go/4e6b330a_kr 구별할 수 있다.
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
#include <stdio.h>
enum { RANDOM, IMMEDIATE, SEARCH } strategy = IMMEDIATE;
int main(int argc, char** argv){
printf("strategy: %d\n", strategy);
return 0;
}
대신, 변경된 경우 위의 두 번째 줄에 다음과 같이 사용된다.
...
enum { RANDOM, IMMEDIATE, SEARCH } strategy;
strategy = IMMEDIATE;
...
쉽게 볼 수 있습니다) 에서 개의경고 너회의 실수:
enums.c:5:1: warning: data definition has no type or storage class [enabled by default]
enums.c:5:1: warning: type defaults to ‘int’ in declaration of ‘strategy’ [-Wimplicit-int]
enums.c:5:1: error: conflicting types for ‘strategy’
enums.c:4:36: note: previous declaration of ‘strategy’ was here
따라서 컴파일러와의 했다 '라는 변수를 선언' 을 (를) '전략을 위한 전략 = 즉시인지' 기본 '유형' int 있었지만, 이미 이전 이 이름의 변수 선언.
그러나 지난 주 () '기능을 할당에서는 놓으면' 이 될 것이라는 유효함 코드:
#include <stdio.h>
enum { RANDOM, IMMEDIATE, SEARCH } strategy = IMMEDIATE;
int main(int argc, char** argv){
strategy=SEARCH;
printf("strategy: %d\n", strategy);
return 0;
}
int strategy;
...
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
오류 메시지는 어떤 줄은 가리키십시오? # 39, & # 39 strategy& 썻냐면 " 선언 때, 이전. # 39 는 what& here"; s " here"; and what does it 쇼?
자신의 설명에 대한 @thoappelsin 게시하기를 말이 맞아. 코드가 올바른지 스니핏 실린 질문 및 오류 없이. 구문 오류 때문에 당신은 당신의 c 소스 파일을 다른 곳에서 다른 나쁜거라 믿지아니하며 합니다. 이넘}, {a, b,c eventtest 기호식 상수입니다 '3' ('a', 'b' 와 'c') 가 정수 값을 가지는 '0', '1' 및 '2', '우리는 하나님이 각각 사용하여 이넘' t care about don& # 39, 이는 일반적으로 대해 더 구체적인 정수 값, 우리가 관심을 갖는 의미를 기호식 상수입니다 이름. 즉, 이 할 수 있습니다.
#include <stdio.h>
enum {a,b,c};
int main(){
printf("%d\n",b);
return 0;
}
그리고 이 '1' 출력합니다.
또한 유효함 됩니다.
#include <stdio.h>
enum {a,b,c};
int bb=b;
int main(){
printf("%d\n",bb);
return 0;
}
전과 같은 출력입니다 예정이다.
이 경우:
enum {a,b,c};
enum {a,b,c};
하지만 이렇게 할 경우 오류가 합니다.
enum alfa{a,b,c};
enum alfa;
오류가 있을 수 없습니다.
이 작업을 수행할 수 있습니다.
enum {a,b,c};
int aa=a;
'0' 가치 '와' aa 와 정수 변수가 될 것으로 보인다. 하지만 이렇게 할 수도 있습니다.
enum {a,b,c} aa= a;
그리고 같은 효과를 갖게 될 것이다 (즉, '0' 가치 '와' aa '에든버러는' int).
이렇게 할 수도 있습니다.
enum {a,b,c} aa= a;
aa= 7;
'가치' 와 '와' aa '을 int 7'.
'정의' 를 이용할 수 없기 때문에 상수입니다 기호식 반복하십시오 이넘 때문에 내가 누누이 선언할 경우 이전에 사용해야 합니다 사용할 경우 int '은' 태그 '이넘':
enum tag1 {a,b,c};
enum tag1 var1= a;
enum tag1 var2= b;
사용할 수 있는 것은 '시간' 에서 '안전' 메리 페데프 먹어서나 각 이넘 tag1 가변적입니다 정의할 수 있습니다. '그냥' 와 '유형' Tag1 메리 페데프 수 있습니다.
typedef enum {a,b,c} Tag1;
Tag1 var1= a;
Tag1 var2= b;
수 있습니다.
typedef enum tag1{a,b,c}Tag1;
Tag1 var1= a;
enum tag1 var2= b;
마지막으로 얘기를 하는 것은 말할 수 있기 때문에 우리는 '정의' 를 사용할 때 사용하는 것이 좋습니다 기호식 상수입니다 문자를 대문자로 이넘, 즉 예를 들면 다음과 같습니다.
enum {A,B,C};
대신
enum {a,b,c};
이 선언에 대한 혼란이 있을 것으로 보인다.
' {}' 때 '전략' 을 다음과 같이, 검색, 즉시 임의적입니까 완료되니라 전에
enum strategy {RANDOM, IMMEDIATE, SEARCH};
이넘 전략 '을' 라는 새 유형을 분판할 있습니다. 그러나 변수를 선언할 때 이넘 '전략' 을 사용해야 할 수 있다. 그냥 '전략' 을 사용할 수 없습니다. 그래서 다음 잘못되었습니다.
enum strategy {RANDOM, IMMEDIATE, SEARCH};
strategy a;
한편 다음은 유효함
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy queen = RANDOM;
enum strategy king = SEARCH;
enum strategy pawn[100];
_
'전략' 을 ' {}' 때 나온 이후 무순서, 즉시 검색 '전략' 을 생성할 수 있습니다 다음 익명의 이넘 될 수 있는 변수 선언 유형:.
이제 같은 뭔가 할 수 있습니다.
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = RANDOM;
그러나 다른 모든 변수를 선언할 수 없습니다 '라는 수 있기 때문에, 즉시 검색} {임의적입니까 이넘 유형' 적이 있습니다. 그래서 다음 잘못되었습니다.
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
enum strategy a = RANDOM;
_
모두 너무 redefinitions 결합할 수 있습니다
enum strategy {RANDOM, IMMEDIATE, SEARCH} a, b;
a = RANDOM;
b = SEARCH;
enum strategy c = IMMEDIATE;
_
앞서 언급한 대로 '' 는 메리 페데프 짧은 만드는 데 사용되는 변수 선언.
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
이제 이넘 {} '는 동의어, 즉시 검색 할 수 있는' 리즈한테 컴파일러와의 무순서 '전략' 을. 이제 자유롭게 사용할 수 있습니다 '전략' 을 변수로 유형:. # 39 더 이상 이넘 전략 ',' t need to 유형: don& 있습니다. 다음은 이제 유효함
strategy x = RANDOM;
_
이넘 이름을 함께 afaq 메리 페데프 결합할 수도 있습니다
typedef enum strategyName {RANDOM, IMMEDIATE, SEARCH} strategy;
typedef enum strategyName {RANDOM, IMMEDIATE, SEARCH} strategy;
enum strategyName a = RANDOM;
strategy b = SEARCH;
이넘 논의는 많은 붉은 청어.
이 코드를 비교하십시오 스니핏 -
int strategy;
strategy = 1;
void some_function(void)
{
}
이로써
error C2501: 'strategy' : missing storage-class or type specifiers
error C2086: 'strategy' : redefinition
이와 함께 한 문제 없이 컴파일됩니다.
int strategy;
void some_function(void)
{
strategy = 1;
}
'전략' 등 변수를 선언 또는 함수 내부에서 dell. 설정해야 합니다. 특히 글로벌 내시경이요 임의의 소프트웨어를 쓸 수 없습니다 - 할당 - 선수단
이 때, 즉시 검색} {임의적입니까 사실에 비춰 int 는 어느 정도 관련이 있다고 해 온 사람들이 대신 can& # 39 만 t 이상으로, 볼 수 있습니다. 문제는 이런 것이 있다는 것을 보여주고 있는 재정의에 오류 메시지 작성자가 잘못한.
이제 첫 번째 것은 옳지 않은 이유를 알 수 있어야 합니다 예, 다른 세 가지 그땅은.
예 1. 땡!
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
void some_function(void)
{
}
예 2. 맞아요.
enum {RANDOM, IMMEDIATE, SEARCH} strategy = IMMEDIATE;
void some_function(void)
{
}
예 3. 맞아요.
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
void some_function(void)
{
strategy = IMMEDIATE;
}
예 4. 맞아요.
void some_function(void)
{
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
}
그냥 일하고 있는 경우 이러한 것을 볼 수 있는 프로그램을 붙여넣으려면 합니다 스니핏 를 프로그램 및 일부 컴파일하십시오 및 일부 그렇지 않습니다.
Gcc 와 전화했는데 내가 내 마지막 대안 제시와 함께 할 수 밖에 없었다 함께 사용하여 컴파일하십시오 아웃해야 오류:.
a = {0, b, c = 메리 페데프 이넘 스테이드 = 1, 2} 스테이드
typedef enum state {a = 0, b = 1, c = 2} state;
typedef enum state old; // New type, alias of the state type.
typedef enum state new; // New type, alias of the state type.
new now = a;
old before = b;
printf("State now = %d \n", now);
printf("Sate before = %d \n\n", before);