달력

06

« 2017/06 »

  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  

'C언어'에 해당되는 글 3

  1. 2008.10.12 가변 인수 함수란? (1)
  2. 2008.10.12 프로세스를 뻗게 만드는 위험한 코드 (1) (1)
  3. 2008.10.12 C언어를 더욱 깊게 공부하자 (2)
2008.10.12 19:50

가변 인수 함수란? 2012 이전/참고자료2008.10.12 19:50

※가변 인수 함수  :  인자로 전달받는 인수의 개수와 타입이 정해지지 않은 상태로 사용(ex. printf , scanf, ...)

※형태

void VarFunc(int Fix, ...)
{
    va_list ap;
    va_start(ap,fix);
   
    while(모든 인수를 다 읽을 떄까지){
      va_arg(ap,인수타입);
    }
    va_end(ap);
}


※ 함수 설명
va_list ap;
C언어에서 함수로 전달되는 인수들은 스택에 저장되며 함수는 스택에서 인수를 꺼내 쓴다.
스택에서 꺼내기 위해 va_list형의 포인터가 사용되고, 타입은 char*로 정의되어 있다.

va_start(ap,마지막 고정인수);
ap포인터 변수가 첫 번째 가변 인수를 가리키도록 초기화한다.
마지막 고정인수의 다음 번지를 ap가 가리키도록 한다.

va_arg(ap,인수타입);
ap가 스택에서 인수타입에 해당하는 메모리 공간을 읽어 값을 리턴한다.
va_arg는 매크로 형태로 되어 있어, 타입명을 인수로 받을 수 있다.

※예제

int GetSum(int num,...)
{
    int sum=0;
    int i;
    va_list ap;
    int arg;

    va_start(ap,num);

    for(i=0; i < num; i++){
        arg = va_arg(ap,int);
        sum += arg;
    }
    va_end(ap);

    return sum;

}

신고
TAG C언어
Posted by 에어림
void main()
{
 
    printf("%s\n",1);

    getchar();
}

printf가 정수 1을 포인터로 해석하여 이 위치의 문자열을 읽으려고 시도하지만,
절대 번지 1은 시스템 영역이기 때문에, 이를 보호하기 위해 운영체제가 프로세스를 강제 종료시킨다.

No error , No warning이지만..

신고
TAG C언어
Posted by 에어림
혼자 연구하는 C/C++혼자 연구하는 C/C++ - 10점
김상형 지음/맥스플러스원
C언어를 깊게 파보고자 하는 사람에게 정말 좋은 책이다. 곳곳에 녹아있는 저자의 내공이 바탕이 된 설명을 읽다 보면, 매번 새로운 지식을 깨우치게 된다.
다만, 중요한 내용을 따로 굵게 표시하거나, 이탤릭 폰트 같은 표시를 해주지 않아서 주의깊에 책을 읽어나가야한다. C언어 입문자에게는 책이 너무 방대하니 좀 더 얇은 책으로 기초적인 부분을 익힌다음 보는 것이 좋을 것 같다.

개인적으로 1,2권 전부 소장하고 있으며, 기회가 된다면 같은 저자의 Windows API도 한 권 구매하고 싶다.
http://airyym.tistory.com2008-10-11T15:19:570.31010
신고
TAG C언어
Posted by 에어림


티스토리 툴바