Language&Framework&Etc/C50 매크로와 선행처리기(26-4) 매개변수의 결합과 문자열화 문자열 내에서는 매크로의 매개변수 치환이 발생하지 않는다. 문자열의 구성을 위한 매크로 함수를 다음의 형태로 정의 #define STRING_JOB(A, B) "A의 직업은 B입니다" 그리고 STRING_JOB(하이, 맨)이라는 매크로 문장이 다으므이 문자열을 만들어낼 것을 기대 "이동춘의 직업은 나무꾼입니다" 그러나 선행처리기는 기대대로 문자열을 만들어내지 못한다. "문자열 안에서는 매크로의 매개변수 치환이 발생하지 않는다." 따라서 "A의 직업은 B입니다"로 출력이 된다. 이 문제를 어떻게 해결? # 연산자를 사용하면 됨 문자열 내에서 매크로의 매개변수 치환이 발생하게 만들기: # 연산자 #define STR(ABC) #ABC "매개변수 ABC에 전달되는 인자를 문자열 "ABC"로 치환해라!" 이렇듯.. 2020. 12. 18. 매크로와 선행처리기(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. 이전 1 2 3 4 5 ··· 13 다음