본문 바로가기

Language&Framework&Etc112

매크로와 선행처리기(26-3) 조건부 컴파일(Conditional Compilation)을 위한 매크로 매크로 지시자 중에는 특정 조건에 따라 소스코드의 일부를 삽입하거나 삭제할 수 있도록 디자인 된 지시자 #if... #endif: 참이라면 if문이 조건부 실행을 위한 것이라면, #if...#endif는 조건부 코드 삽입을 위한 지시자. #define _CRT_SECURE_NO_WARNINGS #include #define ADD 1 #define MIN 0 int main(void) { int num1, num2; printf("두 개의 정수 입력: "); scanf("%d %d", &num1, &num2); /* if문의 뒤에는 반드시 #endif문이 등장해야 하고 이 두 지시자 사이에 존재하는 코드는 조건에 따라서 삽입 및 삭제가 된다. ADD나 MIN이 참이면(=1) 코드가 삽입되고 거짓(=0)이.. 2020. 12. 18.
매크로와 선행처리기(26-2) 대표적인 선행처리 명령문 #define: Object-like macro 매크로 : 컴퍼일러에게 코드의 특성을 알려주는 키워드 (위키백과 참고) 선행처리 명령문은 기본적으로 세 부분. #define을 가리켜 '지시자' 선행처리기가 이 부분을 보고 프로그래머가 지시하는 바를 파악하기 때문에. "이어서 등장하는 매크로를 마지막에 등장하는 매크로 몸체로 치환하라!" #define 지시자 뒤, '매크로' → '매크로 몸체' 선행처리 명령문은 선행처리기에 아래와 같이 지시 "매크로 PI를 매크로 몸체 3.1415로 전부 치환하라" = PI라는 이름의 매크로는 그 자체로 상수 3.1415가 된 셈. PI와 같은 매크로를 '오브젝트와 유사한 매크로(object-like macro)' 또는 '매크로 상수' 예제 #include #define .. 2020. 12. 17.
매크로와 선행처리기(26-1) 선행처리기와 매크로 실행파일은 컴파일과 링크의 과정을 거쳐서 만들어짐 그러나 실제로는 컴파일 이전에 '선행처리'라는 과정을 거치게 됨 선행처리는 컴파일 이전의 처리를 의미 선행처리는 선행처리기에 의해서, 컴파일은 컴파일러에 의해서 링크는 링커에 의해서 진행 컴파일 이전에 선행처리의 과정을 거친다는 점을 주목 컴파일 과정을 거치게 되면 바이너리 데이터로 이루어진 오브젝트 파일이 생성 선행처리의 과정을 거쳐서 생성되는 파일도 그냥 소스파일. 소스파일의 형태가 그대로 유지되기 때문. 선행처리기는, 사용자가 삽입해 놓은 섢애처리 명령문대로 소스코드의 일부를 수정할 뿐인데, 여기서 말하는 수정이란, 단순 치환의 형태로 띠는 경우가 대부분. 예시 #define PI 3.14 // 선행처리 명령문 선행처리 명령문은 # 문자로 시작을 하.. 2020. 12. 17.
메모리 관리와 메모리의 동적 할당(25-2) 메모리의 동적 할당 언뜻 생각해보면 전역변수와 지역변수만 있으면 충분하다는 생각 그러나 프로그램을 구현하다 보면 이 둘이 아닌 다른 유형의 변수를 필요로 하게 됨 전역변수와 지역변수로 해결이 되지 않는 상황 아래는 문제가 있다 #include char* readusername(void) { char name[30]; printf("What's your name? "); gets(name); return name; // 무엇을 반환하는가? } int main(void) { char* name1; char* name2; name1 = readusername(); printf("name1: %s \n", name1); name2 = readusername(); printf("name1: %s \n", name2); return .. 2020. 12. 17.