본문 바로가기

IT/C++ Programming

C99 Flexible array member /* written by kaspy (kaspyx@gmail.com)*/ GNU C 컴파일러에는 배열의 크기를 0으로 하고 이를 가변 배열로 메모리로 할당하여 사용하는 경우가 있다. 일명 가변 배열이라고도 하는데 배열의 크기를 유동적으로 정해줄수있다. 대략 아래 코드같이.. 구조체의 멤버 배열의 크기를 "0" 으로 잡고 사용하는 방법인데 C99 전에는 일명 꼼수로 배열크기 1([1]) 사용되어 왔는데 C99 부터는 공식적으로 0의 크기를 주거나 '[]'만 줘서 유동적인 배열크기를 잡을수 있다. struct line { int length; char contents[0]; /* Here */}; struct line *thisline = (struct line *)malloc (sizeof (struct .. 더보기
C Generic 함수구현 :: void 포인터와 함수 포인터 이야기 /* written by kaspy (kaspyx@gmail.com)*/ 이번 포스팅에서는 c언어의 Generic 함수 구현을 통해서 void 포인터와 함수 포인터가 왜사용되며 어떻게 사용되는지에 대해 다루어 보겠습니다. 설명하면서 다룬 예제코드는 첨부파일에서 참고 0. 데이터의 교환 아래와 같이 두개의 데이터형이 있다면 이를 서로 교환하기위해서는 int a = 1, b =2 ;int t; t = a;a = b;b = t; 와 같은 형태로 데이터를 바꿀수있으며 이를 함수로 표현하자면 void swap(int *a,int *b){ int t ; t = *a; *a = *b; *b = t;} a=2;b=3;swap(&a,&b); 와같이 구현하여 swap 함수를 구현할수있다. 그런데 여기서 a와 b가 int .. 더보기
C언어로 달력 구현하기 /* written by kaspy (kaspyx@gmail.com)*/ 아래는 C언어로 달력을 구현한 소스이다.1980년 1월 1일(화요일)을 기준으로 지정해준 날짜까지 총합을 계산한다 그리고 7로 나눠서 요일을 구해서 달력을 출력한다.미리 기준 연도와 , 기준월을 정해서 그날짜를 기준으로 달력을 출력하는 방법을 선택하여 구현하였다. 중요한건 윤달이 끼는 날때문에 조금 계산이 필요한데, 윤달을 판별하는 알고리즘은 http://blog.naver.com/bohe76?Redirect=Log&logNo=5588545 에서 참고 하였다. #include int base_year = 1980;int base_month = 1; unsigned int total_sum = 0; int month_table[12].. 더보기
C언어로 리틀엔디안, 빅엔디안 확인 하기 컴퓨터는 숫자를 저장할때 두 가지 방식을 사용한다. 하나는 Little Endian 방식으로 바이트를 거꾸로 넣어서 저장하고 또 하나는 Big Endian 방식으로 바이트 순서데로 저장한다. 무선말이고 하니 0x01234567 이라는 숫자를 저장한다면 컴퓨터는 이를 특정 주소에 저장하게 되는데 그림으로 표현하면 아래와 같다. 리틀 엔디안(Little Endian) 기준으로 설명하자면0x01234567 이라는 숫자에 맨 앞에 젤 큰 자리수 "01"이 높은주소에 젤 낮은 자리수 "67"이 낮은 주소에 저장되어있다. 그래서 High Hight Low Low로 외우면 편하다. 빅엔디안(BigEndian)은 그 반대다. 리틀 엔디안(Little Endian)방식을 사용하는 모델은 Intell 기종으로 x86 시리.. 더보기