database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9658 게시물 읽기
No. 9658
ecpg 에서 -D 옵션 관련문의 드립니다.
작성자
박정희(gomiri)
작성일
2016-04-11 16:42
조회수
8,072

안녕하세요.

 

개발하다가 구조체를 DB library에서도 사용하고 Application에서도 사용하려고

 

#ifdef TEST

EXEC SQL BEGIN DECLARE SECTION

....

typedef struct {

...

} T_TEST;

....

EXEC SQL END DECLARE SECTION.

 

#else

typedef struct {

...

} T_TEST;

#endif

 

-D 옵션을 사용 하여 Makefile에서 -DTEST 를 해서 컴파일 하면 다음과 같이 Error 가 생깁니다.

"error: expected '=', ',', ';', 'asm' or '_attribute_' before 'SQL'"

 

-D옵션을 빼면 컴파일은 되고요.

 

질문 사항은 -D 옵션이 컴파일시에 안먹힌다면

 

DB Library 용 Header와 Application Header를 따로 화일로 구분하여 사용해야 할까요?

 

아니면 -D 옵션을 제가 잘못 사용했을까요? 에고...

 

혹시 아시면 알려주시면 감사하겠습니다.

 

이 글에 대한 댓글이 총 1건 있습니다.

ecpg의 -D 옵션은 exec sql ifdef 구문과 관계된 ecpg 전처리 기능입니다.

pgc 코드 안에서는

exec sql ifdef 구문과

#ifdef 구문은 전혀 다른 것입니다.

 

그냥 단순히 C 컴파일에서의 전처리가 필요하면, #ifdef ... 이 구문을 쭉 쓰면 되고요.

ecpg에서의 전처리가 필요하면, -D 옵션 다음 심벌과 그 값으로 지정해서 사용합니다.

 

ecpg -D SYMBOL=1  ...

이런식으로.

이렇게 하면, ecpg 차원에서 전처리를 하고,

다시 C 컴파일러에서 -DSYMBOL 형태로 전처리를 하겠지요.

 

이리 저리 테스트 해보면서 짜보세요. 별로 어렵지는 않습니다.

ecpg가 어떻게 .c 파일을 만드는지만 잠깐 살펴보면 쉽게 이해하실겝니다.

김상기(ioseph)님이 2016-04-11 17:26에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9661postgre 이중화 관련 질문드립니다. [1]
김형석
2016-04-15
8834
9660Postgres 9.3.2를 9.3.x 최근 버전으로 패치하고 싶습니다. [1]
풀스택
2016-04-12
8541
9659PostgreSQL에서 Sort-Merge-Join이 아직 고려되는 이유가 궁금합니다. [1]
박종혁
2016-04-11
8235
9658ecpg 에서 -D 옵션 관련문의 드립니다. [1]
박정희
2016-04-11
8072
9657오라클에서 postgresql로 데이터 옮기는방법..? [4]
권민정
2016-04-11
8796
9656Hashjoin에서 버켓수를 늘리고 싶은데 어떻게 하면 될까요? [1]
박종혁
2016-04-08
7802
9655INCLUDE Path 지정할수 있나요? [2]
박정희
2016-04-07
7744
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다