매크로함수, 인라인함수

·2023년 3월 12일
0

C

목록 보기
10/13

📌매크로함수


#define 함수이름(인자) 치환할 것
#include <stdio.h>
#define square(x) x * x

int main()
{
	printf("%d\n", square(3));

	return 0;
}

컴파일 되기전에 전처리기에 의해 square(3)은 3 * 3으로 변한다.

#include <stdio.h>
#define square(x) x * x

int main()
{
	printf("%d\n", square(3 + 1));

	return 0;
}

3 + 1 * 3 + 1 이렇게 바꿔서 답이 7이 나온다.
#define square(x) (x) (x) 이렇게 묶어주면 (3 + 1) (3 + 1)이 되서 16이 나온다.


📌#(전처리기문에 쓰인다.)


어떠한 인자 앞에 #을 붙이게 되면 이 인자를 문자열로 바꿔준다.

#include <stdio.h>
#define PrintVariableName(var) printf(#var "\n");

int main()
{
	int a;

	PrintVariableName(a);

	return 0;
}

📌##(마찬가지로 전저리기문에 쓰임)


입력된 것을 하나로 합쳐준다.

#include <stdio.h>
#define AddName(x, y) x##y

int main()
{
	int AddName(a, b);

	ab = 3;

	printf("%d \n", ab);

	return 0;
}

📌인라인함수


#include <stdio.h>

__inline int square(int a) { return a * a; }
int main()
{

	printf("%d", square(3 + 1));
	return 0;
}

위에서 사용했던 매크로 함수처럼 사용되지만 우리가 보통 함수를 사용하는 것처럼 치환해준다.(컴파일러가 처리하기 때문에 좀 더 똑똑하다)
매크로 함수 : 3 + 1 3 + 1
인라인 함수 : (3 + 1)
(3 + 1)

함수를 호출하고 리턴 받는 형태 < 직접 작업하는 비용
이 상태일때 치환하게 되지만 반대의 경우는 inline 키워드를 무시하게 된다.
(일반적인 함수처럼 쓰는듯?)


📌#pragma


컴파일러에게 말하는 전처리기 명령

#prgma once
컴파일러로 하여금 이 파일이 오직 딱 한번만 include 될 수 있다고 해줌
#ifndef을 이용하는 것보다 컴파일 시간 절약가능


📌스트림


스트림은 두 개의 다른 장치들을 이어주는 통로
운영체제가 스스로 처리해준다.
ex)키보드로 입력해서 스트림을 통해서 모니터로 출력해준다.


# 참고자료 >[씹어먹는 C언어] (https://modoocode.com/99)
profile
개인공부저장용(하루의 기록)

0개의 댓글