함수 수준 정적 변수 초기화
C에서 함수 수준 정적 변수는 함수 내에서 상태를 유지하는 데 유용한 메커니즘입니다. 그러나 할당 및 초기화 과정은 때때로 의문을 제기합니다.
프로그램 시작 시 할당되고 초기화되는 전역 선언 변수와 달리 함수 수준 정적 변수는 함수가 처음 호출될 때까지 할당되거나 초기화되지 않습니다. .
다음 코드 조각을 고려하세요.
void doSomething() { static bool globalish = true; // ... }
이 예에서 정적 변수 globalish는 doSomething() 함수가 호출될 때까지 할당되거나 초기화되지 않습니다. 이를 입증하기 위해 테스트 프로그램을 분석해 보겠습니다.
#include <iostream> class test { public: test(const char *name) : _name(name) { std::cout << _name << " created" << std::endl; } ~test() { std::cout << _name << " destroyed" << std::endl; } std::string _name; }; test t("global variable"); void f() { static test t("static variable"); test t2("Local variable"); std::cout << "Function executed" << std::endl; } int main() { test t("local to main"); std::cout << "Program start" << std::endl; f(); std::cout << "Program end" << std::endl; return 0; }
컴파일 및 실행 시 출력에는 함수 f()의 정적 변수 t에 대한 생성자가 해당 함수가 호출될 때까지 호출되지 않음이 표시됩니다. 처음:
global variable created local to main created Program start static variable created Local variable created Function executed Local variable destroyed Program end local to main destroyed static variable destroyed global variable destroyed
따라서 함수 수준 정적 변수는 프로그램 시작 시 할당되거나 초기화되지 않고 해당 변수가 정의된 함수의 첫 번째 호출 시에 할당되거나 초기화됩니다.
위 내용은 C의 함수 수준 정적 변수는 언제 초기화됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!