C++C 인터페이스 호출 예시

C++C 코드 호출
C 언어 파일 p.c

#include <stdio.h>
void print(int a,int b)
{
    printf("      C     :%d,%d
",a,b); }
헤더 파일 p.h

#ifndef _P_H
#define _P_H

void print(int a,int b);

#endif
C++파일 호출 C 함수

#include <iostream>
using namespace std;
#include "p.h"
int main()
{
    cout<<"    C    
"; print(3,4); return 0; }
명령 을 집행 하 다

gcc -c p.c
g++ -o main main.cpp p.o
컴 파일 후 링크 오류:main.cpp 가 print(int,int)에 정의 되 지 않 은 참조 입 니 다.
원인 분석
p.c.우 리 는 C 언어의 컴 파일 러 gcc 를 사용 하여 컴 파일 한 것 입 니 다.그 중의 함수 print 를 컴 파일 한 후에 기호 표 의 이름 은 입 니 다.print
  • 우리 가 링크 할 때 사용 하 는 것 은 g++링크 입 니 다.즉,C+링크 방식 입 니 다.프로그램 은 print 함수 의 코드 를 호출 할 때 기호 표 에서 찾 습 니 다print_int_int(C++의 링크 방법 으로 찾 았 기 때문에print_int_int 찾 는 게 아니 라print)의 이름 을 찾 을 수 없 기 때문에 t 는'정의 되 지 않 은 인용'을 알려 줍 니 다
  • 이때 우리 가 print 에 대한 성명 에 extern"C"를 추가 하면 g+컴 파일 러 는 C 언어의 링크 방식 에 따라 찾 습 니 다.즉,기호 표 에서 을 찾 습 니 다.print,이 럴 때 찾 을 수 있 습 니 다.틀 리 지 않 습 니 다
  • 총결산
    컴 파일 후 바 텀 에서 해석 하 는 기호 가 다 릅 니 다.C 언어 는 입 니 다.print,C++는print_int_int
    호출 실패 문제 해결
    p.h 파일 수정
    
    #ifndef _P_H
    #define _P_H
    extern "C"{
    void print(int a,int b);
    }
    #endif
    수정 후 다시 명령 을 집행 하 다
    
    gcc -c p.c
    g++ -o main main.cpp p.o
    ./main
    운행 오류 없 음
    생각:그럼 C 코드 는 C 프로그램 에 호출 될 수 있 습 니까?
    실험:main,c 함 수 는 다음 과 같 습 니 다.
    
    #include <stdio.h>
    #include "p.h"
    int main()
    {
        printf("    C    
    "); print(3,4); return 0; }
    다음 명령 을 다시 실행 합 니 다.
    
    gcc -c p.c
    gcc -o mian main.c p.o
    오류:C 언어 에는 extern"C"라 는 표기 법 이 없습니다.
    C 코드 는 C++로 호출 될 수도 있 고 C 로 호출 될 수도 있다
    p.c 코드 가 C++호출 되 고 C 호출 될 수 있 도록
    p.h 를 다음 과 같이 수정 합 니 다.
    
    #ifndef _P_H
    #define _P_H
    
    #ifdef __cplusplus
    #if __cplusplus
    extern "C"{
    #endif
    #endif /* __cplusplus */
    
    void print(int a,int b);
    
    #ifdef __cplusplus
    #if __cplusplus
    }
    #endif
    #endif /* __cplusplus */
    
    #endif /* __P_H */
    다시 명령 을 집행 하 다
    
    gcc -c p.c
    gcc -o mian main.c p.o
    ./mian
    결과 표시:

    C++C 인 터 페 이 스 를 호출 하 는 예제 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C+C 인 터 페 이 스 를 호출 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기