gprolog.h 포함 및 사용
gprolog.h 포함 및 사용
C 코드에서 gprolog.h 헤더를 포함하고 사용하는 방법을 설명해요.
본문
C 코드는 API와 연관된 C 정의(유형, 매크로, 프로토타입) 집합을 제공하는 gprolog.h를 포함해야 해요. 다음과 같이 이 파일을 포함해요:
#include <gprolog.h>
설치가 올바르게 되었다면 다른 것은 필요하지 않아요. C 컴파일러/전처리기가 gprolog.h를 찾을 수 없으면 필요한 추가 포함 디렉토리를 지정하는 C 컴파일러 옵션(예: -Iinclude_dir)을 gplc에 다음과 같이 전달해요(4.4.3절):
% gplc -C -I include_dir ...
gprolog.h는 다음 C 유형을 선언해요:
PlBool— 정수이며 상수 PL_FALSE(즉 0)와 PL_TRUE(즉 1).PlLong— 포인터를 저장할 수 있는 정수(intptr_t와 동일). 이 유형은 Windows 64비트를 지원하기 위해 GNU Prolog 1.4.0에서 long을 대체해 등장했어요(Windows에서 long 유형은 32비트뿐). 이 유형은 정수 유형을 처리하는 데 사용.PlULong— PlLong과 같지만 부호 없음(uintptr_t와 동일).PlTerm—intptr_t와 동일. 이 유형은 일반적인 Prolog 항을 저장하는 데 사용.
GNU Prolog 1.3.1의 새 기능 및 이전 버전과의 호환성 문제: GNU Prolog 1.3.1에서 API가 네임스페이스를 보호하도록 수정됐어요. 공개 함수, 매크로, 변수 및 유형의 이름은 이제 Pl_, PL_ 또는 pl_로 접두사가 붙어요. 이름 충돌을 방지하기 위해 외부 C 코드는 이 모든 접두사를 피해야 해요. 이전 버전과의 호환성을 보장하기 위해 이전 API가 사용한 이름은 #define 집합 덕분에 사용할 수 있어요. 그러나 이 구식(deprecated) API는 최근 코드에서 사용해서는 안 돼요. 다음과 같이 호환성 매크로의 정의를 방지하는 것도 가능해요:
#define __GPROLOG_FOREIGN_STRICT__
#include <gprolog.h>
추가로 gprolog.h는 매크로 집합을 정의해요:
__GNU_PROLOG__,__GPROLOG__,__GPROLOG_MINOR__,__GPROLOG_PATCHLEVEL__— 그 값은 GNU Prolog의 메이저 버전, 마이너 버전(주의: 이름이__GPROLOG__인 매크로가 마이너 버전을 담음), 패치 레벨을 정수 상수로 담아요. 예를 들어 GNU Prolog 1.3.2는__GNU_PROLOG__를 1,__GPROLOG__를 3,__GPROLOG_MINOR__를 3,__GPROLOG_PATCHLEVEL__을 2로 정의해요. 특정 버전에 의존하는 코드를 작성해야 한다면 더 주의해야 해요. 이 매크로들은 GNU Prolog 1.3.1에 등장했으며(이전에는 미정의), 마이너 버전이 증가할 때마다 패치 레벨이 0으로 재설정되고, 메이저 버전이 증가할 때마다(드물게 발생) 마이너 버전과 패치 레벨이 재설정된다는 점을 기억해요.__GPROLOG_VERSION__— 버전을 다음과 같이 정의된 정수로:major * 10000 + minor * 100 + patch level. 예: 버전 1.3.2는 값 10302.PL_PROLOG_DIALECT— C 상수 문자열(일반적으로"gprolog"). 1.3.2에 등장.PL_PROLOG_NAME— C 상수 문자열(일반적으로"GNU Prolog").PL_PROLOG_VERSION— 버전과 연관된 C 상수 문자열(예:"1.4.0").PL_PROLOG_DATE— 이 버전의 날짜와 연관된 C 상수 문자열(예:"Mar 29 2011").PL_PROLOG_COPYRIGHT— 이 버전의 저작권과 연관된 C 상수 문자열(예:"Copyright (C) 1999-2021 Daniel Diaz").
위의 PL_PROLOG_... 매크로들은 내장 술어 current_prolog_flag/2(8.22.2절) 덕분에 Prolog 플래그에서도 접근할 수 있다는 점에 주의해요.