LINUX에서 GCC 컴파일을 이용하여 MSSQL 접속할때 질문입니다.
안녕하세요.
이번에 리눅스에서 MSSQL 서버로 쿼리를 날리는 프로그램을 짜고있습니다.
여러 예제를 보다가 제가 처음본 함수구조가 있어서요..
GCC에서는 여러 작업을 안 해본 관계로 함수로 기능을 나누고자 하려고 할때 머리가 아프네요..
gcc -o test test.c -lsybdb 로 컴파일을 하고있습니다.
c 파일 한개만 있습니다.
그러던중
main 함수 이외에 아래의 함수들이 정의가 되어있는데.
static 으로 함수를 c 파일 안에서만 사용가능하도록 했고..
인자값을 받고.. 근데
DBPROCESS *dbproc;
DBINT msgno;
int msgstate;
int severity;
char *msgtext;
char *srvname;
char *procname;
int line;
이런 것들이 쌩뚱맞게 저기 왜있는건지 싶어서요...
정말 궁금합니다..
인자값으로 가던가..
아니면 전역변수로 올리던가..
원래 변수를 전역변수로 올려놓고 여러 함수에서 그것을 사용하고자 하였는데
계속 컴파일 에러가 났는데
gcc 에서 컴파일할때 무슨 요령이 있을거같아서요..
답변.. 부탁드리겠습니다...
====================================================
static syb_msg_handler(dbproc,msgno,msgstate,severity,msgtext,srvname,procname,line)
DBPROCESS *dbproc;
DBINT msgno;
int msgstate;
int severity;
char *msgtext;
char *srvname;
char *procname;
int line;
{
/* ------- msg 출력 routine를 작성한다 ----------- */
}
static int syb_err_handler(dbproc,severity,dberr,oserr,dberrstr,oserrstr)
DBPROCESS *dbproc;
int severity;
int dberr;
int oserr;
char *dberrstr;
char *oserrstr;
{
//함수내용
}
원본 소스코드 첫번째 줄부터 카피해서 올리겠습니다.
참고 부탁드립니다.
====================소스코드==============
#include
#include
#include "sybfront.h"
#include "sybdb.h"
static syb_msg_handler(dbproc,msgno,msgstate,severity,msgtext,srvname,procname,line)
DBPROCESS *dbproc;
DBINT msgno;
int msgstate;
int severity;
char *msgtext;
char *srvname;
char *procname;
int line;
{
/* ------- msg 출력 routine를 작성한다 ----------- */
}
static int syb_err_handler(dbproc,severity,dberr,oserr,dberrstr,oserrstr)
DBPROCESS *dbproc;
int severity;
int dberr;
int oserr;
char *dberrstr;
char *oserrstr;
{
/* ------- err msg 출력 routine를 작성한다 ----------- */
fprintf(stdout,"Severity : %d\nDBerror No : %d - %s\n",severity,dberr,dberrstr);
fprintf(stdout,"OSerror No : %d - %s ",oserr,oserrstr);
dbexit();
}
int main() {
LOGINREC *login; /* login information */
DBPROCESS *dbproc;
char ip_addr[40],ip_port[10];
int i, numCols;
char *teststr[8];
================================================ 이하 main문 중략
저건 그냥 구식 방식의 파라메터 선언법입니다.
저건 그냥 구식 방식의 파라메터 선언법입니다.
근데 아마 컴파일러 입장에서 완전히 똑같지는 않을 겁니다. 일부러 인자타입을 불일치하게 호출하도록 해서 경고메시지 나오는 거 보면 타입 프로모션이 일어나는 것 같기도 하고.. 자세한 건 저도 찾아봐야 알겠네요.
암튼 저건 그냥 매개변수 선언한 겁니다.
좋은 하루 되세요!
아하 그렇군요!
그럼 인자값이니까 다른 함수에서도 너도나도 사용할 수가 있겠네요
감사합니다..
댓글 달기