问题:
在 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 的第一个实例时仅调用一次initializeStatics()。
用法:
static_block 宏可用于创建在 main() 之前执行的静态块。
实现:
实现涉及通过函数调用初始化的虚拟变量。静态块代码是函数的主体。宏用于生成唯一标识符以防止名称冲突。
注意:
以上是Java 的静态块是否有 C 等效项,以及如何实现类似的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!