질문:
Java에서 정적 블록은 클래스의 정적 멤버를 초기화하는 데 사용됩니다. . 하지만 C에서는 비슷한 기능을 제공하지 않는 것 같습니다. Java 정적 블록의 동작을 에뮬레이트하는 C 관용구가 있습니까?
답변:
Java 의미의 정적 블록은 C에 존재하지 않지만 클래스 외부에서 유사한 동작을 달성하는 기술. 매크로와 더미 변수의 조합을 사용하여 번역 단위 범위에서 정적 코드 블록을 구현할 수 있습니다.
프로세스 로드 시 초기화의 경우:
<code class="cpp">static_block { // Initialization code goes here }</code>
첫 번째 클래스 인스턴스화 시 초기화:
<code class="cpp">class StaticInitialized { private: static bool staticsInitialized = false; private: virtual void initializeStatics() = 0; public: StaticInitialized() { if (!staticsInitialized) { initializeStatics(); staticsInitialized = true; } } }; class MyClass : private StaticInitialized { public: static int field1; static int field2; private: void initializeStatics() { // Initialization code goes here } };</code>
StaticInitialized 기본 클래스는 MyClass의 첫 번째 인스턴스가 생성될 때 초기화Statics()가 한 번만 호출되도록 보장합니다.
사용법:
static_block 매크로는 main() 이전에 실행되는 정적 블록을 생성하는 데 사용할 수 있습니다.
구현:
구현 함수 호출로 초기화된 더미 변수가 포함됩니다. 정적 블록 코드는 함수의 본문입니다. 매크로는 이름 충돌을 방지하기 위해 고유 식별자를 생성하는 데 사용됩니다.
참고:
위 내용은 Java의 정적 블록에 해당하는 C가 있습니까? 유사한 동작을 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!