C中的析构函数?

时间:2014-10-16 20:03:36

标签: c++ c destructor

C ++有很好的功能,允许在块的末尾调用一些代码 - 析构函数。昨天我随机发现了C语言中的技巧,类似于C ++中的析构函数。为了说明,这里使用这个技巧来自动关闭文件:

#include <stdio.h>

#define AUTO_FILE( id, name, access ) \
for ( FILE* id = fopen( name, access ); id != NULL; fclose( id ), id = NULL )

int main()
{
    AUTO_FILE( f, "hello.txt", "w" ) {
        fprintf( f, "Hello World!" );
    }
    return 0;
}

我认为这很好,可以有趣的用法。例如,如果将它与堆栈数据结构相结合,您可以直接在源代码中声明非常直观和可读的树结构:

frame("frm") {
    menu("mnu") {
        popupmenu("file", "File") {
            menuitem("exit", "Exit");
        }
        popupmenu("help", "Help") {
            menuitem("about", "About...");
        }
    }
    label("lbl", "Hello World!");
    button("btn", "Push me!", btn_onclick);
}

但是当然这个hack不像真正的析构函数那样工作。如果您在块中使用breakreturn语句,则不会调用fclose。但是,如果您需要像C ++中的continue语句那样打破块,则可以使用break语句。 :-)所以也许这个技巧可以通过一些宏魔法来改进,几乎就像真正的析构函数一样。

所以问题是:

是否可以在标准C编程语言中使用析构函数?

0 个答案:

没有答案