c 코딩 질문 두가지 입니다. [함수/지역.전역변수]
루다
1. 두개의 인수를 전달해여 두 수의 곱의 결과를 반환하는 프로그램
입니다.. 코딩의 흐름은 이해가 가는데 중간에 auto int result 부분이 무엇인지 이해가 되질 않습니다.
혹시 프로그램이 실행 되지 않나 생각되어 auto 부분만을 지우고 실행을 해도 잘 실행되고 결과값에도 변화가 없다군요..
고수님들 설명좀 부탁드리겠습니다~
#include stdio.h
int calc_result(int, int);
void main (void)
{
int dig1= 10, dig2= 30, ans= 0;
ans= calc_result(dig1, dig2);
printf(%d * %d= %d\n, dig1, dig2, ans);
}
int calc_result(int n1, int n2)
{
auto int result; // auto 는 무엇인가요? ;;
result= n1* n2;
return result;
}2. extern 데이터 유형 변수 이름
함수 부분이 부족한듯 싶어서 함수를 공부하는중에 지역변수와 전역변수에 대한것을 공부하고 있습니다.
위의 질문과 마찬가지로 estern 이 무엇을 의미하는것인지 잘 모르겠습니다..책에서 보면12 번째 줄에 int count =5;
부분을 main 위로 올려서 선언 하면변수 선언을 하지 않아도 된다고.. 나와있는데요.. 무슨말인지.. 잘모르 겠습니다.
그리고..데이터 형 이라고 하는데..
어떤 데이터 형인지 지식인에 물어봐도 잘 이해 안가는 답변들만 있어서 이렇게 물어보게 되었습니다..
어던것인지 답변좀 부탁 드릴께요 ^^;; #include stdio.h
void f1(void);
void main (void)
{
extern int count; //extern 이 무슨 데이터 유형인지 모르겠어요..
int i;
i= count -5 ;
++count;
f1();
printf(i = %d, count = %d \n, i, count);
}
int count =5; // 이부분을 main 위로 하면변수 선언을 하지 않아도 된다고..나와있는데요.. 무슨말인지..
void f1(void)
{
++count;
}
ps. 지난번에 포인터 부분에 대한 질문을 했는데요 주석도꼼꼼히 달아주시고 설명도 잘해주셔서
포인터 부분에서는 조금은 이해가 되었습니다.
정말 감사합니다 ^^
아직은 많이 부족합니다 열심히 하고 싶습니다.. 많은 도움 주세요 ^^
끝까지 읽어 주셔서 감사합니다 ^^
-
등대 2023-09-16
아하 동일한 이름의 변수가 없는 상태에서 extern 을 해보니 컴파일을 오류가 나지 않는데
실행하니 오류가 나네요. 생성(물건을 여기 두었다고 말하고 실제 물건을 둔것) 을 하지 않은 상태에서 선언(여기있다고 말만 하는 거짓말 같이)만 한것이니 변수에 저장되어있는 내용이 없어서 실행되지 못하고 오류가 나는게 맞습니까?;; -
궁수자리 2023-09-16
네
extern를 사용하면, 변수를 실제 생성하는게 아니라, 선언만 합니다.
그래서, 실행시는 동일한 이름의 변수가 있다면 그것을 사용합니다. -
가자 2023-09-16
아하 auto 는 자동변수 앞에 이것은 자동변수를 선언해주고 있다 라고 알려 주기 위해 쎃여 진다고 이해 해도 될까요? 그리고 extern 음 같은 이름의 변수를 서로 다른 파일에서 사용할때 변수를 두 파일모드 에서 사용하지 않고 둘중 한쪽에서 다른쪽에 미리 선언되어 있는 변수를 참조 한다는 뜻으로 이해 하면 되는거 맞죠?
ps. 아..해당 사이트에서 물어봤는데 아무도 안알려 주시더라구요 그리고 배우고 싶은 입장에선.. 조금이라도 더 잘 설명된글을 -
봄 2023-09-16
2)번은 extern을 붙여서 선언한 변수는 컴파일러에게 이변수는 다른곳에 이미 선언되어 있으니 링크시 그것을 참조하라고 알려주는걸로 알고 있어요. (틀릴려나.. ^^;)
보통, A,B 두파일이 있고, 이둘다 모두 num이라는 전역 변수를 사용한다고 할때, 컴파일러 입장에서 보면 동일한 이름의 전역변수가 2개 있으니 에러를 발생시키겠죠. 이때, 한쪽을 extern을 붙여서 선언해주면, 해당 변수를 생성하는게 아니라 그것을 참조하게 되는거랍니다. -
물보라 2023-09-16
음... 책을 보시고 하는거면, 해당 책 사이트에서 Q&A 해주지 않나요?
1)번은 auto는 생략가능한 키워드 입니다. 일반적으로 자동변수앞에 auto를 붙이는데 이게 생략가능합니다.
자동변수는 쉽게 말하면 함수내에서 선언된 지역변수라고 보시면 되는데요. 선언된 함수(블록내)에서 유효하며 그함수(블록)을 벗어날때 메모리에서 소멸되죠.
반대되는 걸로 static이 붙은 정적변수가 있어요. (반대라고 표현하기는 그렇지만...)
정적변수는 선언된 함