본문 바로가기

BackEnd/C

대표적인 선행처리 명령문 1. #define : Object-like macro 앞서 정의한 #define 명령문을 다시 한번 보자. 위 그림에서 보여주듯이 선행처리 명령문은 기본적으로 세 부분으로 나뉘는데, 제일 먼저 등장하는 #define을 가리켜 ‘지시자’라 한다. 선행처리기가 이 부분을 보고 지시하는 바를 파악하기 때문에 지시자라 하는 것이다. 그리고 앞서 설명했듯이 #define 지시자는 선행처리기에게 다음과 같은 내용을 지시한다. 이어서 등장하는 매크로를 마지막에 등장하는 매크로 몸체로 치환하라. 그리고 #define 지시자 뒤에 등장하는 것을 가리켜 ‘매크로’라 하고, 그 뒤를 이어서 등장하는 것 을 가리켜 ‘매크로 몸체(또는 대체 리스트)’라 한다. 따라서 위의 선행처리 명령문은 다음의 내용 을 선행처리기에게 지시..
전처리기(Preprocessor)와 매크로 1. 전처리란? 전처리는 선행처리를 의미한다. 여기서 말하는 ‘선행’이란,컴파일 이전을 의미한다. 즉 소스코드 는 컴파일러에 의해서 컴파일 되기 이전에, 선행처리기라는 것에 의해서 선행처리 과정을 거치게 된다. 2. 선행처리기가 하는 일은? 선행처리기가 하는 일은 삽입해놓은 선행처리 명령문대로 소스코드의 일부를 수정할 뿐인데 여기서 말하는 수정이란, 단순 치환의 형태를 띠는 경우가 대부분이다. 예를 들어보겠다. 다음은 가장 간단한 선행처리 명령문이다. #define PI 3.14 이처럼 선행처리 명령문은 # 문자로 시작을 하며, 컴파일러가 아닌 선행처리기에 의해서 처리되는 문장이기 때문에 명령어의 끝에 세미콜론을 붙이지 않는다. 그리고 이렇게 구성이 된 명령문은 선 행처리기에게 다음과 같은 메시지를 전달..
sprintf & sscanf 1. sprintf printf 함수는 출력 대상은 콘솔인 반면, sprintf 함수는 출력의 대상이 메모리 공간이다. sprintf 함수의 사용방법과 기능은 printf 함수와 상당히 유사하다. 둘 다 문자열을 조합해서 만들 어 낸 다는 공통점을 지닌다. 다만 printf 함수는 만들어진 문자열을 모니터로 출력하는 반면, sprintf 함수는 문자열 배열에 출력을 한다(저장을 한다). 따라서 sprintf 함수는 첫 번째 전달인자 로, 출력의 대상이 되는 문자열 배열의 주소값 정보가 전달되도록 정의되어 있다. 1234567891011121314151617#include int main(void){ int num1=24; float num2=7.15f; char str[]="Hi!"; char strBu..
문자열의 정보 추출 함수들 1. strchr, strrchr 문자열에서 특정 문자가 등장하는 처음 또는 마지막 위치를 알고 싶을 때 함수 strchr은 두 번째 인자로 전달되는 문자가 처음 등장하는 위치를, 첫 번째 인자로 전달되는 주소 값의 문자열에서 찾는다. 그리고 찾으면 해당 문자의 주소 값을, 못 찾으면 NULL 포인터를 반환한다. 함수 strrchr의 기능도 strchr과 유사하다. 다만 차이점은 strrchr은 문자열의 끝에서부터 찾기 시작한다는 점에 있다. 즉 strrchr 함수는 찾고자 하는 문자가 등장하는 마지막 위치의 정보를 반환한다. 1234567891011121314151617#include #include int main(void){ char str[]="It is possible to master C in..
문자열 컨트롤 함수들(strlen,strcpy,strncpy,strcat,strncat,strcmp,strncmp) 1. strlen : 문자열의 길이 정보 반환 다음은 문자열의 길이를 계산해서 반환하는 기능의 함수이다. 이 함수는 인자로 전달된 주소값을 시작으로, 널 문자를 만날 때까지 문자의 개수를 세어 나가 는 방식으로 문자열의 길이를 계산하는데, 이 때에 널 문자는 문자열의 길이에 포함이 되지 않는 다. 그리고 이렇게 계산된 문자열의 길이 정보는 함수 호출이 완료되면서 반환된다. 1234567891011121314151617181920#include #include int main(void){ char str1[]="1234567"; char str2[]="프로그래밍"; char str3[]="C Programming"; printf("%s: %d \n",str1, strlen(str1)); printf("배열..
puts,putchar,gets,getchar 함수와 버퍼 1. puts 함수와 putchar 함수 1) puts 함수 이 함수의 기본적인 호출방식은 다음과 같다. puts("How beautiful day it is!"); 이처럼 출력하고자 하는 문자열을(문자열의 주소 값을)인자로 전달하면, 해당 문자열이 출력 된다. 실패시 EOF를 반환한다. EOF는 End of File로 파일의 끝을 의미하는 -1 상수인데 콘솔출력의 실패를 알리는 용도로도 사용된다. 2) putchar 함수 출력하고자 하는 문자 정보를 인자로 전달하면, 해당 문자가 출력된다. putchar('A'); 3) puts 함수와 putchar 함수 예제 코드 123456789#include int main(void){ puts("ab"); putchar('c'); return 0;}cs 12ab..
함수 포인터를 인자로 요구하는 표준 함수들(atexit, qsort, bsearch) 1. 프로그램 종료 시 호출하고픈 함수가 있다면 atexit(at exit) 표준함수에 정의된 atexit 함수를 이용하면 프로그램 종료 시 자동으로 호출하고픈 함수를 등록할 수 있다. 반환형과 매개변수 형이 void로 선언된 함수의 이름이(주소 값이) atexit 함수의 인자로 전달되어 야한다. 그리고 이렇게 인자로 전달된 함수가 프로그램 종료 시 자동으로 호출 되며, 이렇게 자동 으로 호출되어야 할 함수는 32개 이상 등록할 수 있다. 예제를 보자. 1234567891011121314151617181920212223242526272829303132333435#include #include void FirstFunc(void);void SecondFunc(void);void ThirdFunc(void)..
버블 정렬 (Bubble Sort)의 이해와 함수 포인터 기반의 함수 정의 1. 버블 정렬의 개념 함수 포인터를 활용하기에 앞서 버블정렬의 개념이 필요한데 아래 링크에서 개념을 참고하자. https://cg-developer.tistory.com/141 2. 버블정렬의 구현 1234567891011121314151617181920212223242526272829303132333435#include void BubbleSort(int ary[], int len); int main(void){ int arr[4]={3, 2, 1, 4}; int i; BubbleSort(arr, sizeof(arr)/sizeof(int)); for(i=0; i