typedef struct {
int a;
int b;
} sct;
라는 간단한 구조체가 있을 때
sct s1;
void fun(struct sct *s1);
와
void fun(sct s1) 처럼 앞에 struct 붙이고 안 붙이고가 무슨 차이가 있는지 궁금합니다.
실제 함수 실행할 때 struct 넣으면 안되던게 빼면 되기도 하고 빼면 오류 생기다가 struct 넣으면 되기도 하더라구요
요약 : 매개변수로 사용할 때 struct 붙인거랑 안 붙인거 차이가 뭔가요?
매개변수가 문제가 아니라 typedef 를 잘 이해 못하고잇는듯함 그거부터 찾아보셈
감사합니다 한번 찾아보고오겠습니다
그런데 찾아보고 왔는데 typedef A B 하면 A라는 타입명 대신에 B라는 이름으로 쓸 수 있게끔 치환 시켜주는 것 말고 더 있나요??
오류 뜨는 코드 보여줄 수 있음?
과제 코드라 main함수 까지 다 보여드려야될거 같아서 ㅋㅋㅋ 위에 분 말처럼 typedef 찾아보고도 이해 안되면 코드랑 같이 질문 드리러 오겠습니다 감사합니당
int 같은 C의 primitive types와 달리, 구조체는 예를 들어 이름이 record라고 하면 그를 지칭할 때 매번 앞에 struct를 붙여 struct record라 해야함. enum도 비슷함. 근데 그게 더럽게 번거롭거든. 그래서 typedef을 이용해 aliasing 하는거임. 컴파일러에게, 내가 앞으로 그냥 record라고 말하면 넌 그걸 struct record라 알아 들어! 라 말해주는 셈이지. typedef는 그러한 aliasing을 할 수 있게 해주는 키워드고. 그게 전부임.
그런데 그러면 그냥 매개변수로 struct record *a 말고 fun(record *a); 이런식으로 선언해버리면 안되는거 아닌가요?? 하도 오류 생겨서 struct 때문인가 하고 없에보니까 오히려 오류가 해결되니까 당황스러워서...
너가 올린 예시에선 이미 구조체를 정의하며 함께 typedef로 aliasing 역시 하고 있음.
아 struct 땐것과 안 땐 것 똑같다는 말씀이시군요 죄송합니다 잘못 이해했었습니다. 그런데 제 코드도 위처럼 똑같이 typedef 해준건데 그러면 struct record *a 랑 record *a 랑 똑같이 인식되야되는건데 오류가 왜 생긴건지 좀 당황스럽네요 ㅋㅋㅋㅋㅋ
코드에 뭔가 잘못 된게 있겠지?
sct s1; void func1(sct *s1);int main(){ printf("asd\n"); s1.a = 5; s1.b = 6; func1(&s1); return 0;}void func1(sct *s1){ printf("a = %d\n",s1->a ); printf("b = %d\n",s1->b );}
잘되는데? struct sct를 넣으면 당연히 안되지. 원래라면 올바른 코드는 typedef struct sctest { int a; int b; } sct; 이거야
님이 붙인 sct는 typedef 에 대한 이름에 지나지 않아 구조체에 대한 이름은 선언하지 않았어 그러니까 struct sct 이런건 당연히 존재하지 않는 이름이지 typedef 와 struct 에 대한 이해가 부족하니까 좀더 공부하세요
아니 그런데 struct 안 붙였을 때는 안될 때 struct 붙이면 된 함수가 한 코드 안에 있는데 이건 뭐죠 ㅋㅋㅋ fun1(struct sctest sct); 랑 fun2(sctest sct)가 한 코드안에 다 있어요...
정확히는 포인터 써서 fun1(struct sct* a)랑 fun2(sctest *a)가 한 코드안에 있어요 제가 태그는 안 넣어서..
그건 뭐 전체코드를 이쁘게 캡쳐해서 올려보는 것도 좋은데 전역변수 s1을 선언하고 그 이름그대로 다른데서 사용하는 문제도 있고 총체적 난국이니까 더 공부하시는게 ㅋㅋ
님도 그거까지는 모르신다는거네요 알겠습니당... 고마워요 ㅋㅋㅋ
전체코드를 봐야 알져 일단 전역변수랑 지역변수 이름부터 다르게 하세용
전역변수랑 지역변수 다르게 했어요 에초에 전역변수도 선언 안했어오.. 그냥 예시들려고 위에다 선언한거고 제가 질문하고 싶은거는 매개변수로 사용할 때 struct 붙인 것과 안 붙인 것이 어떤 차이가 있는가여서 거기 까진 신경을 안 썼네요