Defer Implement in C
깨끗하고 간결한 리소스 정리가 가능한 Go 스타일의 defer 개념이 C에서 인기를 얻었습니다. . 그러나 이 기능에 대해 표준 또는 잘 지원되는 라이브러리 구현을 찾는 것은 어려울 수 있습니다.
표준 템플릿 라이브러리(STL) 또는 Boost에 지연에 대한 기본 지원이 없음에도 불구하고 사용 가능한 외부 구현이 있습니다. . 이러한 구현 중 하나는 오버헤드가 없는 가벼운 솔루션입니다.
<code class="cpp">#ifndef defer struct defer_dummy {}; template <class F> struct deferrer { F f; ~deferrer() { f(); } }; template <class F> deferrer<F> operator*(defer_dummy, F f) { return {f}; } #define DEFER_(LINE) zz_defer##LINE #define DEFER(LINE) DEFER_(LINE) #define defer auto DEFER(__LINE__) = defer_dummy{} *[&]() #endif // defer</code>
이 구현에는 최소한의 설정만 필요하며 코드베이스에 쉽게 통합할 수 있습니다. 구문은 간단합니다.
<code class="cpp">defer { statements; };</code>
예를 들어 다음 코드 조각에서는 read_entire_file 함수의 범위가 종료되면 fclose 작업이 자동으로 실행됩니다.
<code class="cpp">auto file = std::fopen(filename, "rb"); if (!file) return false; defer { std::fclose(file); }; // don't need to write an RAII file wrapper. // ...</code>
이 0은 -오버헤드 구현은 C에서 리소스 정리를 관리하는 편리하고 효율적인 방법을 제공하여 복잡한 RAII 클래스나 사용자 정의 메모리 관리 기술이 필요 없이 Go와 유사한 연기 기능을 제공합니다.
위 내용은 성능 저하 없이 C에서 Go-Style Defer를 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!