VB6 및 FoxPro 같은 여러 프로그래밍 환경을 지원하는 라이브러리에서 작업하고 있습니다. 가장 일반적인 공통 분모이므로 C 규칙을 고수해야합니다. 이제 스타일에 관한 질문이 있습니다.C API 함수 스타일
함수 프로세스가 문자열을 입력하고 반환한다고 가정합니다. 이 과정에서 오류가 발생할 수 있습니다. 현재 제안 된 스타일은 다음과 같습니다.
int func(input params... char* buffer, unsigned int* buffer_size);
이 스타일의 좋은 점은 오류 코드를 비롯하여 모든 것이 프로토 타입에 포함되어 있다는 것입니다. 그리고 메모리 할당을 피할 수 있습니다. 문제는 그 기능이 아주 장황하다는 것이다. 그리고 buffer_size는 any 일 수 있기 때문에 더 많은 코드를 구현해야합니다.
char* func(input params...);
이 스타일은 버퍼를 삭제하는 호출자가 필요합니다
또 다른 옵션은 숯불 *를 반환하고, 오류를 나타 내기 위해 NULL을 반환하는 것입니다. 서버 프로그램이 메모리 조각화 문제를 겪을 수 있으려면 메모리 할당이 필요합니다.
두 번째 옵션의 변형은 스레드 로컬 변수를 사용하여 반환 된 포인터 char *를 보유하여 사용자가 버퍼를 삭제할 필요가 없도록하는 것입니다.
어떤 스타일을 좋아합니까? 그리고 이유는?
버퍼 유형이 char **가 아니어야합니까? 또한, 왜 옵션 1에 buffer_size가 필요하고 옵션 2에는 buffer_size가 필요하지 않습니까? – mweerden
그는 미리 할당 된 버퍼를 in 매개 변수로 전달하고 호출 된 함수가 오류 텍스트로 채울 것으로 기대합니다. – sharptooth
그래, 그렇지만 buffer_size가 포인터 일 필요는 없지, 그렇지? – mweerden