기본 콘텐츠로 건너뛰기

C : 매크로와 선행처리기(Preprocessor)

매크로(macro)란?

 : 컴퓨터 과학 분야에서 정해진 순서에 따라 어떻게 특정한 입력 시퀀스가 출력 시퀀스로 매핑되어야 하는지를 정의하는 규칙

- 선행처리 

: 컴파일 이전의 처리를 의미. 삽입해 놓은 선행처리 명령문대로 소스코드의 일부를 수정(단순치환, substitution)할 뿐.


#include <stdio.h> // 선행처리 "stdio.h 파일의 내용을 이곳에 가져다 놓으세요."

#define PI 3.14 // 선행처리 ( 지시자, 매크로, 매크로 몸체) PI : 오브젝트 유사 매크로(object-like macro) or 매크로 상수
#define NAME "이영준"
#define AGE 27
#define PRINT_ADDR printf("주소 : 경기도 고양시 일산구\n");
#define SQUARE(X) X*X
#define PRODUCT(X, Y) ((X)*(Y))
#define CIRCLE_AREA(R) (PRODUCT((R),(R)) * PI)

int main() {
double num;
double rad = 2.1;
num = PI * 3.5;
printf("파이 : %lf \n", num);
printf("반지름 %g인 원의 넓이 : %g \n\n", rad, CIRCLE_AREA(rad));

printf("이름 : %s \n", NAME);
printf("나이 : %d \n\n", AGE);
PRINT_ADDR;

int num2 = 20;
printf("num2의 제곱 : %d \n", SQUARE(num2) );
printf("3의 제곱 + 2 : %d \n", SQUARE(3 + 2)); // 3*3+2
printf("3+2의 제곱 : %d \n", SQUARE((3 + 2))); //(3+2)*(3+2)
return 0;
}


  • 연산을 요하는 매크로를 만들경우 관호를 마구마구 칩시다!
  • C로 라즈베리파이를 사용할때 PIN_NUM을 define 한다.


- 조건부 컴파일(Conditional Compilation)

: 특정 조건에 따라 소스코드의 일부를 삽입하거나 삭제할 수 있도록 디자인된 지시자.
  • #if 조건매크로 ... #elif 조건매크로 ... #endif
  • #ifdef 매크로 ... #endif : 정의되어 있다면.
  • #ifndef 매크로 ... #endif : 정의되지 않았다면
  • 위의 세 부분 모두 #else 의 삽입 가능

- 매개변수의 결합과 문자열화

#define STRING_JOB(A, B) "A의 직업은 B입니다."

printf("%s", STRING_JOB(이영준, 개발자) );

출력 : A의 직업은 B입니다.


#define STRING_JOB(#A, #B) "A의 직업은 B입니다."
printf("%s", STRING_JOB(이영준, 개발자) );
출력 : 이영준의 직업은 개발자입니다.


- 매크로를 이용한 문자열 연결

#define STNUM(Y, S, P) Y##S##P
printf(학번 : %d \n", STNUM(10 11 187)); 


  • 숫자만 처리 가능하다.

- 결론 

: C언어 기초에 나오는 매크로 내용만 정리했습니다. 자세한 내용은 컴파일러 자료 관련 참고.

댓글

이 블로그의 인기 게시물

유닉스 & 리눅스 가계도. Unix&Linux Family

- Unix Family - Shell History

알고리즘 문제풀이 사이트.

알고리즘 문제풀이 사이트 정리. #삼성 소프트웨어 능력 테스트 #카카오톡 <국내> -백준 저지 https://www.acmicpc.net/ -코드그라운드 https://www.codeground.org/ -프로그래머스 https://programmers.co.kr/ -oj.uz https://oj.uz/ -Algospot https://algospot.com/ -Jungol http://www.jungol.co.kr/ <해외> -codeforces http://codeforces.com/

라즈베리파이(Raspberry Pi3 jessie) 와 PC 연결.

- 유무선 AP 공유기의 사설망 사용 파일공유 - 고정아이피로 변경 및 DNS 설정 및 tftp #vi /etc/network/interfaces 사용하는 네트워크에 추가 address 192.168.0.120 : 서버주소 netmarsk 255.255.225.0 gateway 192.168.0.1 #vi /etc/resolv.conf nameserver 192.168.0.1 : 도메인네임 서버 이전 - dhcp 데몬 사용안함 #systemctl disable dhcpd #systemctl enable networking #reboot - tfpt 사용 #find / -name tftp 2> /dev/null : tftp 서비스를 사용하는지 검색, 오류는 안띄움 #apt-get install tftp : 설치 #tftp 192.168.0.25 - PC와 유선으로 연결 - 라즈베리 파이에  Generic PL2303HX USB Transfer to TTL RS232 Serial Port Adapter Cable 연결. 빨강 :  +5V 검정 : GND 흰색 : TXD 녹색 : RXD - PC에 USB연결 후 드라이버 설치 - 윈도우에서 putty를 사용해 연결 드라이버 설치과정에서 드라이버를 찾지 못하는 이슈가 생길 수 있다. 윈도우즈 업데이트 드라이버 설치로 하면 설치 가능. 드라이버 설치가 완료되면 Putty를 이용해 연결하자. 로그인 하면 라즈베리파이 터미널처럼 사용 할 수 있음. 라즈베리파이 터미널과 pc putty 터미널간의 메시지를 주고 받을 수 있다. - 블루투스 사용 안하기 : 속도 증가, 통신속도 115200 맞추기 위해서. 자세한 내용 : https://arsviator.blogspot.kr/2016/08/3-raspberry-pi-3-uartbluetoot...