首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C语言中有没有什么“设计模式”?

C语言中有没有什么“设计模式”?
EN

Stack Overflow用户
提问于 2010-11-06 18:53:36
回答 4查看 63.3K关注 0票数 94

我知道设计模式通常与面向对象编程有关,但是您是否有一些在编写C程序时经常使用的模式?

我对经典面向对象模式的简单翻译不感兴趣,请不要提及Duff的设备。;-)

EN

回答 4

Stack Overflow用户

发布于 2010-11-06 18:59:02

通过回调实现多态,例如标准库的qsort函数。它所需要的只是一种比较两个元素的方法,并且它可以对它们的数组进行排序。

通过使用函数集(Vtable)来表示类型的相关属性,以便泛型例程可以有效地处理它,您可以比这复杂得多。例如,在打开的文件或网络端口上进行读取、写入等调用。

票数 7
EN

Stack Overflow用户

发布于 2010-11-06 18:55:53

是的,有。延迟初始化、单例、对象池、对象状态等都很容易在纯C中实现。

示例(延迟初始化)

代码语言:javascript
复制
#include <stdio.h>

struct foo
{
    int payload;
};

int calculate_payload()
{
    printf("%s\n", "Performing lengthy initialization...");
    return 42;
}

struct foo *get_default_foo()
{
    static int foo_calculated = 0;
    static struct foo default_foo;
    if (!foo_calculated) /* assuming single-threaded access */
    {
        foo_calculated = 1;
        default_foo.payload = calculate_payload();
    }
    return &default_foo;
}

int main()
{
    struct foo *foo1, *foo2;

    printf("%s\n", "Starting the program");

    foo1 = get_default_foo();
    printf("%d\n", foo1->payload);

    foo2 = get_default_foo();
    printf("%d\n", foo2->payload);

    return 0;
}
票数 5
EN

Stack Overflow用户

发布于 2010-11-06 18:56:27

设计模式通常对只有一个级别的现有环境提供的东西进行建模。如果您将C及其标准库作为环境,那么面向对象是一个卓越的设计模式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4112796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档