안녕하세요
이번에 시나공 교재로 기사실기시험 준비 중인데 사용자정의함수 부분에서 좀 의아한게 있어서 질문 올려봅니다.
아래는 예제 문제입니다.
#include <stdio.h>
void func(int i,int j); //A
main()
{
int a=3, b=12;
func(a,b);
printf("%d, %d\n", a, b);
}
void func(i, j) //B
int i,j; //C
{
i*=3;
j/=3;
printf("%d, %d\n", i, j);
}
1.
주석 A에서 void func(int i, int j); 와 같이 인자값 받는 위치에다가 선언했는데 B 처럼 사용이 가능한 건가요?
int i, int j;
void func(i,j);
뭔가 이런 형태여야 하지 않을까 생각이 들어서요
2.
그리고
B를 보면 void func(i,j) 이렇게 적었는데 ; 가 들어가야 하지 않나 해서요
오타인가 하고 교재의 다음 문제들도 확인했는데 다 아래쪽 함수에는 ; 제외하고 사용을 했더라구요
A와 B는 무슨 차이가 있는 걸까요?
3.
마지막 질문은 주석 C 부분인데요
교재에 설명된 내용을 보면 인수로 받은 i와 j가 정수형 변수임을 꼭 선언해야 한다고 나와있는데
왜 선언하는 위치가 함수보다 아래에 위치한 건지 잘...이해가 안가서요
설명 좀 부탁드립니다
감사합니다.
안녕하세요 길벗수험서 운영팀입니다.
[1]
먼저 말씀하신 형태대로는 불가능합니다.
사용자정의함수의 선언 방식은 아래의 두 가지 방식으로 가능합니다.
첫 번째
void func(i, j) int i, j;
또는
void func(i, j)
int i, j;
두 번째
void func(int i, int j);
첫 번째의 방식에 줄을 나눈 방식에서는 void func(i,j) 뒤에 세미콜론;이 붙지 않음을 주의하세요.
하나의 구문을 두 줄로 나눈 것 뿐입니다.
[2]
위에서 설명드렸듯이 단순히 사용방식의 차이일 뿐입니다.
자료형을 괄호 안에서 선언하느냐, 또는 밖에서 선언하느냐의 차이이죠.
자료형이 선언되지 않은 변수를 사용하는 것은 오류를 불러일으킬 수 있으므로, 세미콜론으로 구분하지 않고 하나의 구문 내에서 모두 선언해주어야 합니다.
[3]
이 또한 위에서 설명되어진 것 같네요.
말씀하신대로 이미 사용된 변수를 뒤에서 다시 자료형을 선언하는 방식은 존재할 수 없습니다.
때문에 세미콜론이 하나만 사용되는 하나의 구문내에 자료형 선언까지 모두 포함시켜 줌으로써 실제 컴파일될 때는 자동으로 선언이 먼저 수행되게 됩니다.
행복한 하루되세요 :)
-
관리자2019-05-21 14:20:05
안녕하세요 길벗수험서 운영팀입니다.
[1]
먼저 말씀하신 형태대로는 불가능합니다.
사용자정의함수의 선언 방식은 아래의 두 가지 방식으로 가능합니다.
첫 번째
void func(i, j) int i, j;
또는
void func(i, j)
int i, j;
두 번째
void func(int i, int j);
첫 번째의 방식에 줄을 나눈 방식에서는 void func(i,j) 뒤에 세미콜론;이 붙지 않음을 주의하세요.
하나의 구문을 두 줄로 나눈 것 뿐입니다.
[2]
위에서 설명드렸듯이 단순히 사용방식의 차이일 뿐입니다.
자료형을 괄호 안에서 선언하느냐, 또는 밖에서 선언하느냐의 차이이죠.
자료형이 선언되지 않은 변수를 사용하는 것은 오류를 불러일으킬 수 있으므로, 세미콜론으로 구분하지 않고 하나의 구문 내에서 모두 선언해주어야 합니다.
[3]
이 또한 위에서 설명되어진 것 같네요.
말씀하신대로 이미 사용된 변수를 뒤에서 다시 자료형을 선언하는 방식은 존재할 수 없습니다.
때문에 세미콜론이 하나만 사용되는 하나의 구문내에 자료형 선언까지 모두 포함시켜 줌으로써 실제 컴파일될 때는 자동으로 선언이 먼저 수행되게 됩니다.
행복한 하루되세요 :)