Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 02-6 : C++에서 C언어의 표준함수 호출하기 본문

Programming Lang/C++

C++ Chapter 02-6 : C++에서 C언어의 표준함수 호출하기

시데브 2023. 7. 11. 17:20

C++에서 C언어의 표준함수 호출

 C언어의 라이브러리에 있는 함수들을 이용하기 위해서는 .h를 생략하고 앞에 c를 붙이면 된다.

#include <stdio.h> -> #include <cstdio>  
#include <stdlib.h> -> #include <cstdlib>  
#include <math.h> -> #include <cmath>  
#include <string.h> -> #include <cstring>

 

 이와 관련된 다음 예제를 살펴보자.

#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;

int main(void)
{
    char str1[] ="Result";
    char str2[30];

    strcpy(str2,str1);
    printf("%s: %f \n", str1, sin(0.14));
    printf("%s: %f \n", str2, abs(-1.25));

    return 0;
}
Result: 0.139543 
Result: 1.250000

 stdio.h 같은 C언어의 헤더파일을 이용하는 것도 물론 가능하지만, 가급적이면 C++의 헤더를 기반으로 작성하는 것이 좋다.

 

C++의 헤더를 선언해야 하는 이유

 우선 아래 예제를 살펴보자.

#include <stdio.h>

int main(void)
{
    printf("Hello World!");
    return 0;
}

 C++에서 위와 같은 함수 호출을 허용하는 이유는 하위 버전과의 호환성(backwards compatibility)를 제공하기 위함으로 볼 수 있다.

 

 그럼에도 C++의 헤더를 선언해야 하는 이유는 C언어 표준 라이브러리의 함수와 C++ 표준 라이브러리 함수가 완벽하게 일치하지는 않기 때문이다.

 

 그 예시로 C언어에서의 abs함수와 C++에서의 abs 함수의 구조 차이를 알아보자.

int abs(int num);//C언어에서의 abs함수
long abs(long num);
float abs(float num);
double abs(double num);
long double abs(long double num); 
// C++에서의 abs 함수

 C++에서는 함수 오버로딩이 가능하다는 차이점으로 위와 같이 함수의 구조가 달라진다. 때문에 가급적이면 C++에서는 C++의 헤더를 선언하는 것이 좋다.

 


  • 출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12