> 백엔드 개발 > C++ > Java의 정적 블록에 해당하는 C가 있습니까? 유사한 동작을 어떻게 달성할 수 있습니까?

Java의 정적 블록에 해당하는 C가 있습니까? 유사한 동작을 어떻게 달성할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-10-27 03:22:02
원래의
538명이 탐색했습니다.

Is there a C   equivalent for Java's static blocks, and how can similar behavior be achieved?

C의 정적 블록

질문:

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() 이전에 실행되는 정적 블록을 생성하는 데 사용할 수 있습니다.

구현:

구현 함수 호출로 초기화된 더미 변수가 포함됩니다. 정적 블록 코드는 함수의 본문입니다. 매크로는 이름 충돌을 방지하기 위해 고유 식별자를 생성하는 데 사용됩니다.

참고:

  • 정적 블록은 중괄호로 묶어야 합니다.
  • C에서는 정적 코드의 실행 순서가 보장되지 않습니다.
  • 이 접근 방식은 정적 초기화 순서 문제를 해결하지 못합니다.

위 내용은 Java의 정적 블록에 해당하는 C가 있습니까? 유사한 동작을 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿