마음만은 새내기

항상 초심을 잃지 않고 생활하겠습니다~!

프로그래밍/C언어와 친구들

C언어 inline 함수에 관해서... (+매크로 함수)

동동매니저 2019. 4. 1. 19:33

안녕하세요~! >_<

오늘 C++ 실습 때 '인라인 함수'애 관한 내용을 듣게 되었는데요,

함수 호출의 오버헤드를 줄이고자 함수의 내용을 코드에 직접 삽입(?)하는 것이라고 보시면 될 것 같아요!!

그런데... Visual Studio 2010으로 아래의 소스를 작성하니 컴파일 오류가 떴어요 ㅠ.ㅠ

(참고로 확장자는 .c 입니다.)

#include <stdio.h>

#define m_sum(x,y) x+y
#define m_mul(x,y) x*y

int i_sum(int,int);
int i_mul(int,int);

int main(void){
	printf("m_mul : a*b = %d\n",m_mul(10+20,30+40)); // 전처리기에 의해 치환되므로, 10+20*30+40 = 650이 됨.
	printf("i_mul : a*b = %d\n",i_mul(10+20,30+40)); // 함수의 매개 인수로 전달되므로, (10+20)*(30+40) = 2100이 됨.

	printf("m_sum : a*b = %d\n",m_sum("abc",10)); // 전처리기는 이러한 오류를 잡을 수 없음!!
	//printf("i_sum : a*b = %d\n",i_sum("abc",10)); // 컴파일 오류가 발생하므로 주석 처리
}

inline int i_sum(int x,int y){
	return x+y;
}

inline int i_mul(int x,int y){
	return x*y;
}

혹시나 해서 인터넷 검색을 해 본 결과...

인라인 함수는 C언어의 경우 C99부터, C++의 경우 기본 지원이라고 나와 있었어요...

Visual Studio 2010이 C99를 지원하지 않는걸까요... ㅠ.ㅠ

참고로, 위의 소스를 VS2010에서 C++로 컴파일하면 문제가 없고, VS2017에서 C로 컴파일해도 문제가 없었습니다.

VS2010은 C99마저 지원을 하지 않는것은 아니겠죠...? 라는 의문을 품게 되었답니다...

여기에 매크로 함수도 포함되어있는데요, 이는 전처리기에 의해 치환되기 때문에, 의도치 않은 결과가 발생할 수 있어요!!