매크로 함수 매크로함수 형식 #define 매크로함수(인자리스트) 대치내용 장점 - 매크로 함수는 자료형에 독립적 - 실행속도가 일반함수보다 빠름 - 함수 호출 문장이 전부 매크로 함수 몸체 부분으로 치환되어 코드 크기가 커짐 단점 - 매크로 함수는 매크로 대치이므로 의도치 않은 결과를 가져올 수 있음 - 매크로 함수에서 증감연산자 사용하면 안됨 예시 1 #include 2 #define SQUARE(x) x*x 3 #define SQUARE2(x) (x)*(x) 4 5 int main() 6 { 7 int num; 8 printf("input number?"); 9 10 scanf("%d", &num); 11 printf("%d, square: %d \n", num, square(num+2)); 12 ..
비트연산자 비트연산자 특징 - 응용 프로그램에서 비트단위(2진수) 연산을 할 때 사용되는 연산자 - 속도가 빠름 - &|~^>> 0; i = i/2) if(i & n2) printf("1 "); else printf("0 "); printf("\n"); n3 = n1 & n2; printf("%d & %d : ", n1, n2); for(i = 128; i > 0; i = i/2) if(i & n3) printf("1 "); else printf("0 "); printf("\n"); n3 = n1 | n2; printf("%d | %d : ", n1, n2); for(i = 128; i > 0; i = i/2) if(i & n3) printf("1 "); else printf("0 "); printf("..
공용체와 구조체 비트필드 공용체 UNION - 차례대로 메모리 할당되는 구조체와 달리 같은 메모리 공간을 여러 멤버가 공유하는 사용자 정의 자료형 - 구조체와 메모리 할당구조가 다름 - 가장 큰 자료형의 크기만큼 메모리 공간이 할당되며 모든 멤버는 시작주소가 동일 - 하드웨어 제어시 애용 #include int main() { union UNI { char x; short int y; long int z; } uni; printf("union size : %d\n", sizeof(uni)); printf("%p, %p, %p \n", &uni.x, &uni.y, &uni.z); uni.z = 0x12345678; printf("%x %x %x \n", uni.x, uni.y, uni.z); return ..
구조체와 구조체포인터 구조체 구조체 정의 - 서로 다른 타입의 멤버라고 하는 값들의 통합 자료형 - 사용자 정의 타입 * cf ) 배열 : 같은 타입의 데이터 모임 구조체 선언 #include // 변수 아니고 멤버 struct SCORE { char name[20]; int kor; int math; int eng; float avg; }; int main() { // 구조체 변수 struct SCORE st1 = {"홍길동", 50, 78, 95}; printf("%d, %d \n", sizeof(st1), sizeof(struct SCORE)); printf("&st1 : %p, %p\n", &st1, st1.name); st1.avg=(st1.kor+st1.math+st1.eng) / (float..
프로세스 프로세스 정의 메모리에서 실행중인 프로그램 특징 - xx번지라고 하는 주소 개념을 가짐 - 메모리 주소 공간은 스택 세그먼트 / 힙세그먼트 / 데이터 / 코드 세그먼트로 구분 - 제한된 공간에 적재하기 위해 운영체제가 관리 메모리 주소공간 - 메모리에 할당된 모든것은 시작주소가 있음 - 메모리 공간 1) 스택 세그먼트 : 지역변수 저장(임시데이터 저장공간) 2) 힙 세그먼트 : 동적메모리 할당 요청시 사용되는 공간 3) 데이터 세그먼트 : 전역변수, 정적변수 저장 4) 코드 세그먼트 : 프로그램의 실행코드와 함수 저장 포인터 포인터 정의 실행중인 프로세스의 임의의 주소 특징 메모리 공간의 주소를 확인하고 제어할 수 있는 자료형으로 메모리를 직접 조작할 수 있음 포인터 자료형 - 1) 포인터 선언..
조건 컴파일 전처리기의 이해 전처리란 원시 소스파일을 컴파일하기 전에 행해야 할 작업 특징 - 프로그램이 컴파일되기 전에 선행 - #으로 시작 - ;로 끝나면 안됨 매크로 상수 - #define 문을 이용하여 정의하는 상수 - 프로그램 전체에서 텍스트 대치를 선행처리기에게 알림 - 일련의 문자들이 다른 문자로 대치되는 매크로 대치 과정 조건컴파일 - 프로그램 코드의 일부가 선택적으로 컴파일될 수 있게함 - 지시자 : #if #elif, ,#else, #endif, #ifdef, #ifndef - 헤더파일의 중복 문제 #ifndef _POINT_H_ #define _POINT_H_ struct Point { int x, y; } pos; #endif ※ 시스템 헤더파일은 한번만 정의되도록 설계 vi /us..
C 컴파일러 #include int main() { printf("Hello World. \n"); return 0; } 컴파일러 종류 cc 유닉스에서 사용하는 표준 C 컴파일러 gcc GNU C 컴파일러로 주로 리눅스 시스템에서 사용함 컴파일 과정 1) 전처리 과정 #define, #include, #if와 같은 지시자 처리 2) 컴파일 전처리 작업을 수행한 소스 코드를 어셈블리 코드로 변환 후 오브젝트 파일로 변환 원시파일의 문맥과 문법을 확인하여 오류가 없으면 소스코드를 기계어 코드로 번역 3) 링크 오브젝트 파일과 라이브러리 함수를 연결하여 실행가능한 실행파일을 생성 CC컴파일 옵션 -o : 실행파일 이름 지정 /data/it/it03]cc hello.c -o hello /data/it/it03]..