가변 인자 함수에서 인자를 받을때 (컴파일러가 진급을 시킨다)

기본인자 진급을 적용한다.

1. 정수 진급 : 정수형태는 int -> unsigned int 로 변경 된다. int 형으로 담을수 없는 수이면 unsigned int로 바꾼다.

2. 실수 진급 : float -> double 형으로 변경

 

가변인자

1. one pass 방식인 C의 컴파일러인 경우 가변 인자 함수의 경우 인자의 데이타 형을 알려 주지 않기 때문에 컴파일러가 가장 크다고 생각되는 데이타 형으로 변경을 해야 무사히 컴파일이 가능하다.

2. 실제 가변 인자 함수 작성시 인자의 데이타 형이 줄어들기 때문에 프로그램 하기가 쉬워 진다.

3. 실제 값을 그대로 받게 만들수도 있지만, 최초에 이런식으로 만들어 졌기 때문에 하위 호환성(역사적 이유) 때문에 그대로 사용하고 있다.

 

[code type=c]#include <stdio.h>
int main(void)
{
 signed char sc;
 signed short ss;

 sc = 10; /* 00001010 이 8 bit 10이며 32 bit에도 똑같은 값이다. */
 ss = 10;
 printf("%x %x\n", sc, ss);

 sc = -10;

/* 00001010의 1의 보수는 11110101에 1을 더하면 2의 보수 이므로11110110 이다. 이 수를 int로 진급 시킨다. signed char는 int로 다 포함 할수 있다.8 bit수가 32 bit int로 바뀌어야 한다. 바꾸는 방법은 11110110 앞에 1을 24개 붙인다. 왜냐하면 1110110의 1의 보수는 1001 이고, 이것의 보수가 1이 24개 앞에 있는 1110110 이다. 간단하게 생각하기 위해서는 -10을 바로 32 bit 수로 쓴다고 생각해보자. 음수인 경우 앞에 전부 1을 붙여 준다. */
 ss = -10;
 printf("%x %x\n", sc, ss);

 {
  float f = 123.625;
  printf("%f\n", f);
 }

 return 0;
}[/code]

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/150

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/150

트랙백 주소 :: http://www.cipher.pe.kr/tt/cipher/trackback/150

트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/trackback/150

트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/trackback/150

댓글을 달아 주세요

댓글 RSS 주소 : http://www.cipher.pe.kr/tt/cipher/rss/comment/150
댓글 ATOM 주소 : http://www.cipher.pe.kr/tt/cipher/atom/comment/150
[로그인][오픈아이디란?]