12. [C++] C++에서 C언어의 표준함수 호출하기

2024. 4. 11. 18:33[C++]/C++ 언어 기초

🍃 C++에서 C언어의 표준함수 사용하기

c를 더하고, .h를 빼자

#include <stdio.h> -> #include <cstdio>
#include <stdlib.h> -> #include <cstdlib>
#include <math.h> -> #include <cmath>
#include <string.h> -> #include <cstring>
  • 헤더파일의 확장자인 .h를 생략하고 앞에 c를 붙이면 C언어에 대응하는 C++의 헤더파일 이름이 된다.

 

#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;
}

 

 

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

  • C++의 관점에서, 여전히 다음형태로 함수호출을 허용하는 이유는 '하위 버전과의 호환성(backwards compatibility)'를 제공하기 위함이다.
#include <stdio.h>

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

 

  • C++ 표준 라이브러리가 제공하는 함수들과 C 표준 라이브러리가 제공하는 함수들이 완전히 일치하는 것도 아니다.
    • C++ 에서는 함수 오버로딩이 가능하기 때문에 자료형에 따라서 함수의 이름을 달리해서 정의하지 않고, 보다 사용하기 편하도록 함수를 오버로딩해두었다.
long abs(long num);
float abs(float num);
double abs(double num);
long double abs(long double num);

 


문제

 

다음 표준함수를 호출하는 예제를 만들되, C++의 헤더를 선언해서 만들어보자.

그리고 예제의 내용은 상관이 없지만, 아래의 함수들을 최소 1회 이상 호출해야 한다. 참고로 다음 함수들은 C언어의 경우 <string.h>에 선언되어 있다

1.strlen 문자열의 길이 계산
2.strcat 문자열의 뒤에 덧붙이기
3.strcpy 문자열의 복사
4.strcmp 문자열의 비교

 

#include "stdafx.h"
#include <iostream>
#include <cstring>

using namespace System;
using namespace std;

int main (void)
{
	char str1[20] = "Hello world!";
	char str2[20] = "추가한 문장입니다.";
	char str3[20];

	cout<< "문자열의 길이는 "<<strlen(str1)<<"입니다."<<endl;   
	strcat(str1,str2);        
	cout<< "문자열을 붙이면 "<< str1 << endl;        
	strcpy(str3,str1);        
	cout<< "str1을 str3에 복사하면 " << str3 << endl;  

	if (!strcmp(str1, str3)){               
		cout << "str1과 str3은 동일하다." << endl;        
	}else{               
		cout<< "str1과 str3은 다르다.<< endl;       
	}
	
	return 0;
}
반응형