ECPG는 C ++ 토토 프로그램에 대한 제한된 지원이 있습니다. 이 섹션은 일부 경고에 대해 설명합니다.
theECPG
Preprocessor는 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그것에 대해.
theECPG
사전 처리기는 C의 변수 범위를 이해합니다. C 언어에서는 변수의 범위가 코드 블록을 기반으로하기 때문에 다소 간단합니다. 그러나 C ++에서 클래스 멤버 변수는 선언 된 위치와 다른 코드 블록으로 참조되므로ECPG
사전 처리기는 클래스 멤버 변수의 범위를 이해하지 못할 것입니다.
예를 들어 다음 경우ECPG
사전 처리기는 변수에 대한 선언을 찾을 수 없습니다dbname
in테스트
메소드, 오류가 발생합니다.
클래스 testcpp
이 코드는 다음과 같은 오류가 발생합니다.
ecpg test_cpp.pgc
test_cpp.pgc : 28 : 오류 : 변수 "dbname"이 선언되지 않았습니다
이 범위 문제를 피하려면테스트
로컬 변수를 중간 저장소로 사용하도록 방법을 수정할 수 있습니다. 그러나이 접근법은 코드를 확장하고 성능을 줄이기 때문에 해결 방법이 좋지 않습니다.
void testcpp :: test ()
이러한 기술적 한계를 이해하면ECPG
C ++의 사전 처리기 C ++의 C ++ 토토 프로그램을 사용하여 ECPG 기능을 사용할 수 있도록 C 객체 및 C ++ 객체를 연결하는 것이 C ++ 코드에 직접 내장 된 SQL 명령을 직접 작성하는 것보다 더 나을 수 있다는 결론에 도달 할 수 있습니다. 이 섹션에서는 간단한 예제로 C ++ 토토 프로그램 코드에서 일부 임베디드 SQL 명령을 분리하는 방법을 설명합니다.
세 가지 종류의 파일을 생성해야합니다 : C 파일 (*.pgc
), 헤더 파일 및 C ++ 파일 :
토토 프로그램을 작성하려면 다음과 같이 진행하십시오. 전환하다테스트
intest_mod.c
실행ECPG
및 생성test_mod.o
컴파일test_mod.c
C 컴파일러와 함께 :
ecpg -o test_mod.c test_mod.pgc
다음, 생성test_cpp.o
컴파일테스트
C ++ 컴파일러와 함께 :
C ++ -C Test_cpp.cpp -o test_cpp.o
마지막 으로이 객체 파일을 연결하십시오.test_cpp.o
andtest_mod.o
, C ++ 컴파일러 드라이버를 사용하여 하나의 실행 파일로 :
C ++ test_cpp.o test_mod.o -lecpg -o test_cpp
문서에 올바른 것이없는 것이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면