34.13. C++토토 프로그램#

ECPG는 C ++ 토토 프로그램에 대한 제한된 지원이 있습니다. 이 섹션은 일부 경고에 대해 설명합니다.

theECPGPreprocessor는 C (또는 C와 같은) 및 내장 된 SQL 명령으로 작성된 입력 파일을 가져 와서 임베디드 SQL 명령을 C 언어 청크로 변환하고 마지막으로 A를 생성합니다..C파일. C Language Chunks가 사용한 라이브러리 기능의 헤더 파일 선언ECPG생성 |extern "c"...C ++에서 사용될 때 블록이므로 C ++에서 원활하게 작동해야합니다.

일반적으로ECPG사전 처리기는 C 만 이해합니다. C ++ 언어의 특수 구문 및 예약 된 단어를 처리하지 않습니다.

C ++ 애플리케이션에서 내장 된 SQL 코드를 사용하는 안전한 방법은 C ++ 토토 프로그램 코드가 데이터베이스에 액세스하기 위해 호출하고 나머지 C ++ 코드와 연결하는 C 모듈에 ECPG 호출을 숨기고 있습니다. 보다섹션 34.13.2그것에 대해.

34.13.1. 호스트 변수 범위#

theECPG사전 처리기는 C의 변수 범위를 이해합니다. C 언어에서는 변수의 범위가 코드 블록을 기반으로하기 때문에 다소 간단합니다. 그러나 C ++에서 클래스 멤버 변수는 선언 된 위치와 다른 코드 블록으로 참조되므로ECPG사전 처리기는 클래스 멤버 변수의 범위를 이해하지 못할 것입니다.

예를 들어 다음 경우ECPG사전 처리기는 변수에 대한 선언을 찾을 수 없습니다dbnamein테스트메소드, 오류가 발생합니다.

클래스 testcpp

이 코드는 다음과 같은 오류가 발생합니다.

ecpg test_cpp.pgctest_cpp.pgc : 28 : 오류 : 변수 "dbname"이 선언되지 않았습니다

이 범위 문제를 피하려면테스트로컬 변수를 중간 저장소로 사용하도록 방법을 수정할 수 있습니다. 그러나이 접근법은 코드를 확장하고 성능을 줄이기 때문에 해결 방법이 좋지 않습니다.

void testcpp :: test ()

34.13.2. 외부 C 모듈을 사용한 C ++ 토토 프로그램 개발#

이러한 기술적 한계를 이해하면ECPGC ++의 사전 처리기 C ++의 C ++ 토토 프로그램을 사용하여 ECPG 기능을 사용할 수 있도록 C 객체 및 C ++ 객체를 연결하는 것이 C ++ 코드에 직접 내장 된 SQL 명령을 직접 작성하는 것보다 더 나을 수 있다는 결론에 도달 할 수 있습니다. 이 섹션에서는 간단한 예제로 C ++ 토토 프로그램 코드에서 일부 임베디드 SQL 명령을 분리하는 방법을 설명합니다.

세 가지 종류의 파일을 생성해야합니다 : C 파일 (*.pgc), 헤더 파일 및 C ++ 파일 :

테스트 #

C에 내장 된 SQL 명령을 실행하기위한 하위 라우 틴 모듈.test_mod.c사전 처리기의

#include "test_mod.h"
test_mod.h #

C 모듈에 함수의 선언이있는 헤더 파일 (테스트). 에 포함되어 있습니다.테스트. 이 파일에는가 있어야합니다.extern "c"C ++ 모듈에서 연결되기 때문에 선언 주변의 차단.

#ifdef __cplusplus
테스트 #

Main루틴 및이 예에서는 C ++ 클래스

#include "test_mod.h"

토토 프로그램을 작성하려면 다음과 같이 진행하십시오. 전환하다테스트intest_mod.c실행ECPG및 생성test_mod.o컴파일test_mod.cC 컴파일러와 함께 :

ecpg -o test_mod.c test_mod.pgc

다음, 생성test_cpp.o컴파일테스트C ++ 컴파일러와 함께 :

C ++ -C Test_cpp.cpp -o test_cpp.o

마지막 으로이 객체 파일을 연결하십시오.test_cpp.oandtest_mod.o, C ++ 컴파일러 드라이버를 사용하여 하나의 실행 파일로 :

C ++ test_cpp.o test_mod.o -lecpg -o test_cpp

수정 제출

문서에 올바른 것이없는 것이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면