본문 바로가기

생략부호 (Ellipsis) 본문

💘 C++/함수

생략부호 (Ellipsis)

Hyonii 2022. 8. 21. 00:20

생략부호 (Ellipsis)

함수를 여러 가지 구현하다 보면 매개 변수 개수가 정해져 있지 않으면 좋겠다고 생각할 수 있다.

이때 생략부호 Ellipsis를 사용할 수 있다.

 

findAverage라는 함수를 하나 구현했다.

먼저 파라미터로 들어올 argument들의 개수를 받아주고

그다음에 찍어주면 된다.

 

va_list라는 것을 선언을 하나 해주었다.’

마우스 가져다 대면 char *가 뜨는데 문자로 받는 것이다.

 

va_start를 하는데 이때 list를 첫 번째 파라미터로 넣어주고

 

두 번째로는 count

 

여기로 들어오는 argument가 몇 개인지 개수를 알려줘야 된다.

argument 개수가 들어와야 된다는 것 잊지 말기!

 

그다음에 실제로 값을 읽어 들일 때에는

 

va_arg라는 함수를 사용을 한다.

 

첫 번째로는 list가 들어오고 , 그다음은 type이 들어와야 되는데

여기서는 integer로 변환을 해주고 있는 것이다.

그다음 다 끝나면

 

끝났다고 얘기해주는 것이고

 

여기서는 필요한 계산을 해주면 된다.

 

여기에서는 count 개수만큼의 argument를 평균 내주는 함수를 만들었다.

 

findAverage에서 처음 int는 개수이고, 그다음 뒤에 1, 2, 3, “Hello”, ‘c’ 가 들어가 있는데

실행을 시키면

 

1은 한 개만 있다는 의미니까

 

얘만 적용이 되고 나머지는 싹 무시한다.

 

3을 넣으면 1, 2, 3 3개의 평균값 2가 나온다.

 

5 하고 다섯 개를 넣으면 3이 나올 것이다.

 

마지막에는 실제로 넣어준 것은 다섯 개밖에 안되는데 맨 앞에 10이라고 써놨다.

이럴 때는 어떻게 될까? 실행시켜 보면

 

예측한 대로 1, 2, 3 은 나왔고

그다음에 이상한 숫자가 나왔다. 

맨 앞에 넣은 개수와 실제 들어가는 argument 개수를 맞춰줘야 한다.

 

위험성도 있고 argument가 미리 정해져 있어야 하는 불편한 점도 있는데

나중에 코딩 실력이 좋아지면 이거를 어떻게 하면 내가 편하게 사용할까 생각하면서 여러 가지 트릭들을 사용할 수 있다.

암호문처럼 집어넣고 해석을 하는 방식으로 코딩하는 방법도 있다.

마지막 파라미터는 끝났다는 기호를 집어넣을 수 있고

마치 문자열 맨 뒤에 \0 를 집어넣듯이 어떤 부호를 숨겨놓을 수도 있다.

또 대부분의 경우에는 개수를 같이 넣어준다.

개수, 타입을 나타내는 글자 하나, 실제 value, 타입을 나타내는 암호 하나, value 하나 이런 식으로 넣을 수도 있다.

 

ellipsis는 사실 사용하기 좀 위험하고 디버깅도 힘들다.

초보자에게는 사용을 권장하지 않는다.

정말 다른 방법으로 하기가 너무 힘들 때 가끔 쓰는 게 좋다.

템플릿이랑 같이 사용할 때도 있다.

 

 

12.6 — Ellipsis (and why to avoid them) – Learn C++

In all of the functions we’ve seen so far, the number of parameters a function will take must be known in advance (even if they have default values). However, there are certain cases where it can be useful to be able to pass a variable number of paramete

www.learncpp.com

 

Comments