안뇽하세요. 전문대 1학년 다니는 C린이예여.. 제가 구조체 s를 if문 안에서 선언을 해주고 아래 if문 LAD 함수에서 그 s를 쓰려고 하는데
'E0020오류 식별자 "s"가 정의되어 있지 않습니다.'랑 'C2065 's':선언되지 않은 식별자 입니다.'라고 하는데 어떻게 해결을 할까요?
제가 생각하는 문제의 원인은 if문 안에서 선언이 이루어져서 조건이 맞지 않을때는 정의가 되지 않는 녀석이라 저런 오류가 나는 것 같아요.
'그럼 그냥 미리 정의해주면 되는거 아니냐?' 하실 수 있는데 요구되는 내용이 텍스트 파일로 부터 명령어를 읽어들여서 배열을 할당 해주라는게 들어가서리..
그래서 if문으로 명령어 판독을 하고 구조체 선언을 해준거라서요 ㅠㅠ..
'배열을 할당'한다는 표현을 사용하면 일반적으로 malloc 등의 방법을 이용해서 동적 할당을 해야 합니다. malloc을 아직 배우지 않았다면 다른 문제일 수 있겠습니다만, malloc을 수업에서 배웠다면 malloc 쓰라는 이야기입니다.
감사합니당.한번 시도해보겠습니다. 이게 학교 과제 다 하고 다른 학교꺼 청강하는 건데 저희 학교 진도보다는 앞선 내용이라 안 배운게 많이 필요하네용..
요구사항이랑 선언위치는 아무런 관계없음 - dc Cpp
혹시 제가 잘 이해가 안 되는데 설명 해주실 수 있겠습니까?
변수는 데이터가 들어갈 공간인 셈이잖아. 공간 확보하는거랑 사용자로부터 받은 입력으로 데이터를 결정하는 건 별개의 문제지 - dc Cpp
if문 밖의 스코프에서 선언해놓고 if문 내에서 할당해도 문제없단거지. 다만 if문을 안들어가서 쓰레기값이 들어있는 경우는 피해야겠지 - dc Cpp
17번// CREATE 명령을 사용하면 그때 배열을 만들라는 얘기 같아서, 의미구조상으로는 저게 맞음 (실제로는 C에서 저게 불가능하니 포인터를 미리 선언해놓고 CREATE 했을 때 동적할당 해야하지만).
동적할당을 사용하지 않는다면 C에서는 선언이랑 할당이 동시에 일어나잖어. Java라면 배열이 레퍼런스의 배열이니까 이야기가 다를수있지만
짤은 눈아파서 제대로 안봤는데 암튼 뭐... 스택에 배열 가리킬 포인터 놔두는건 아무문제 읍제ㅋㅋ - dc Cpp
선언과 대입을 동시에 하는걸 초기화라고 함. - dc Cpp
오..첨 알았어요.감사합니다 ㅠㅠ..
ㅇㅇ 그래서 실제로는 저게 불가능하니까 포인터를 미리 선언해놓고 if 안에서 동적할당해야된다고 위에 썼잖어
ㅇㅇ - dc Cpp
초기화 설명한거 뻘쭘하게 댓삭하고있어.. - dc Cpp
결론은 님 말이 맞긴한데, 구체적으로 말하자면, else if처럼 작용되기 때문에, 컴파일에서는 작동이 안 될 수 있음. 가령 CREATE가 BUF랑 수가 다르고, LOAD랑 수가 다르면 코드로 보면 s가 먼지 알수 있지만, 런타임에서 s 자체는 실행되지 않았기 때문에 알 수 없음
윗분 말 역시 비슷함. if문이 런타임에서 돌아가는 경우는 문제 없음. 다만 방금 말했는 CREATE랑 BUF수가 다르면 양수 또는 음수를 반환해서 s가 먼지 알 수 없는 상태로, BUF랑 LOAD의 수가 같으면 0을 반환해서 알수없는 s가 될 가능성이 있음 컴파일에서는 이를 미리 막은 것.
글고 배열을 할당하려면 동적할당을 해야하는 거고 정리 끝
우왕..잘 모르겠는데 엄청 감사합니다 ㅠㅠ