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)으로 종료되어야 합니다.