C의 리턴 함수
C 함수를 호출하기 위해 EGL은 함수와 호출 코드 사이에서 인수를 전달하는 메커니즘인 인수 스택을 사용합니다. EGL 호출 함수는 인수를 스택에 넣고 호출된 C 함수는 이 인수를 스택에서 가져와 값을 사용합니다. 호출된 함수는 리턴값을 스택에 넣고 호출자는 이 값을 가져와 값을 검색합니다. 팝 및 리턴 외부 함수는 인수 스택 라이브러리와 함께 제공됩니다. 리턴 외부 함수는 아래에 설명되며 사용된 팝 외부 함수는 C의 스택 함수에서 설명됩니다.
외부 리턴 함수는 해당 인수를 호출 함수 외부에서 할당된 스토리지로 복사합니다. 이 스토리지는 리턴된 값이 팝될 때 해제됩니다. 이러한 상황을 통해 함수의 로컬 변수에서 값을 리턴할 수 있습니다.
참고: 리턴 함수는 원래 IBM® Informix® 4GL(I4GL)에서
사용되었으므로 함수 이름에 "4gl"이 포함되었습니다.
값을 리턴하기 위한 라이브러리 함수
다음 라이브러리 함수는 값을 리턴하는 데 사용할 수 있습니다.
- extern void ibm_lib4gl_returnMInt(int iv)
- extern void ibm_lib4gl_returnInt2(short siv)
- extern void ibm_lib4gl_returnInt4(int lv)
- extern void ibm_lib4gl_returnFloat(float *fv)
- extern void ibm_lib4gl_returnDouble(double *dfv)
- extern void ibm_lib4gl_returnDecimal(dec_t *decv)
- extern void ibm_lib4gl_returnQuotedStr(char *str0)
- extern void ibm_lib4gl_returnString(char *str0)
- extern void ibm_lib4gl_returnVarChar(char *vc)
- extern void ibm_lib4gl_returnDate(int date)
- extern void ibm_lib4gl_returnDateTime(dtime_t *dtv)
- extern void ibm_lib4gl_returnInterval(intrvl_t *inv)
- extern void ibm_lib4gl_returnInt8(ifx_int8_t *bi)
다음 테이블은 I4GL 7.31 이전 버전과 7.31 이상 버전 사이의
리턴 함수 이름을 맵핑합니다.
| 7.31 이전 버전 이름 | 7.31 이상 버전 이름 |
|---|---|
| retint | ibm_lib4gl_returnMInt |
| retshort | ibm_lib4gl_returnInt2 |
| retlong | ibm_lib4gl_returnInt4 |
| retflo | ibm_lib4gl_returnFloat |
| retdub | ibm_lib4gl_returnDouble |
| retdec | ibm_lib4gl_returnDecimal |
| retquote | ibm_lib4gl_returnQuotedStr |
| retstring | ibm_lib4gl_returnString |
| retvchar | ibm_lib4gl_returnVarChar |
| retdate | ibm_lib4gl_returnDate |
| retdtime | ibm_lib4gl_returnDateTime |
| retinv | ibm_lib4gl_returnInterval |
ibm_lib4gl_returnQuotedStr( )의 인수는 널 종료 문자열입니다. ibm_lib4gl_returnString( ) 함수는 대칭에만 포함됩니다. 이는 내부적으로 ibm_lib4gl_returnQuotedStr()를 호출합니다.
C 함수는 양식의 편의성과 상관없이 데이터를 리턴할 수 있습니다. 변환이 가능한 경우 EGL은 값을 팝업으로 표시할 때 필요에 따라 데이터 유형을 변환합니다. 데이터 유형 변환이 가능하지 않은 경우 오류가 발생합니다.
EGL에서 호출된 C 함수는 항상 return(n) 문과 함께 종료되어야 합니다. 여기서 n은 스택으로 보내는 리턴값의 수입니다. 아무 것도 리턴하지 않는 함수는 return(0)으로 종료되어야 합니다.