相关疑难解决方法(0)

在C中规划和组织应用程序开发的最佳方法是什么?

我只需要在C中编码几次,而且每次我都这样做,它就变成了一些无法管理的野兽.

我已经在C#和.Net中完成了大部分的编程,因此我非常习惯于类风格的体系结构,但我似乎无法掌握C语言应用程序中的组织.我应该把函数定义放在一个文件中,将函数定义放在一个文件中,然后在另一个文件中处理,等等.这个主题有没有什么好的资源?

另请参阅:从面向对象的土地中挣扎?

c

3
推荐指数
1
解决办法
1149
查看次数

使用ANSI C的工厂模式实现

任何人都可以指点我如何使用ANSI C实现工厂模式?如果覆盖更多的模式,那将只是一个奖励.在C++中这样做对我来说是微不足道的,但由于C没有类和多态,我不太清楚如何做到这一点.我正在考虑使用所有常见数据类型的"基础"结构,然后使用void指针,并按照与顶部基础结构相同的顺序定义结构的所有公共部分?或者不能保证它们在内存中以相同的方式结束?

c design-patterns factory c89

3
推荐指数
2
解决办法
6330
查看次数

具有匿名结构的C11结构继承

我看到了在C11 中用匿名方法实现某种struct继承的方法struct,并想尝试一下。这是我所拥有的:

struct struct_a {
    int aa;
};

struct struct_b {
    struct struct_a;
    int bb;
};

int main(void)
{
    volatile struct struct_b my_b;
    my_b.aa = 5; /* not a member of my_b */
    my_b.bb = 6;

}
Run Code Online (Sandbox Code Playgroud)

来自gcc的结果:

$ gcc -std=c11 struct_extend.c 
struct_extend.c:11:20: warning: declaration does not declare anything
     struct struct_a;
                    ^
struct_extend.c: In function ‘main’:
struct_extend.c:18:9: error: ‘volatile struct struct_b’ has no member named ‘aa’
     my_b.aa = 5; /* not a member of …
Run Code Online (Sandbox Code Playgroud)

c inheritance gcc struct c11

3
推荐指数
2
解决办法
890
查看次数

你如何用非OO语言进行继承?

我读到早期的C++"编译器"实际上将C++代码翻译成C并在后端使用了C编译器,这让我很奇怪.我已经掌握了足够的技术知识来解决大部分工作原理,但我无法弄清楚如何在没有语言支持的情况下进行类继承.

具体来说,如何定义一个包含几个字段的类,然后是一堆继承自它的子类,每个子类都添加自己的新字段,并能够作为函数参数交替传递它们?特别是当C++允许你在堆栈上分配对象时,你怎么能这样做呢?所以你甚至可能没有指向隐藏的指针?

注意:我得到的前几个答案是关于多态性的.我知道关于多态和虚方法的一切.我甚至曾经做过一次关于Delphi中虚拟方法表如何工作的低级细节的会议演示.我想知道的是类继承和字段,而不是多态.

c c++ oop inheritance history

2
推荐指数
2
解决办法
400
查看次数

面向对象的ANSI C?

可能重复:
你能用C编写面向对象的代码吗?

我想知道是否可以使用严格的ANSI C作为面向对象的语言.如果可能,我如何在ANSI C中创建一个类.虽然该语言不是为OO设计的,但我真的很想尝试这个.

任何例子,链接等都是值得赞赏的.

c oop

2
推荐指数
1
解决办法
5853
查看次数

C:你如何模拟'实例'?

假设我在C中有以下代码表示堆栈:

#define MAX 1000

int arr[MAX];
static int counter = 0;
isstackempty()
{
    return counter <= 0;
}
void push(int n)
{
    if (counter >= MAX) {
        printf("Stack is full.  Couldn't push %d", n);
        return;
    }
    arr[counter++] = n;
}

int pop(int* n)
{
    if(isstackempty() || n == 0) {
        printf("Stack is empty\n");
        return 0;
    }
    *n = arr[--counter];
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在一个stack.c文件中,函数原型在一个头文件中.


现在,来自C#和OO背景,如果我想要stack在我的应用程序中分离s,在OO语言中我将创建两个实例.但是在C中,你如何处理这种情况?

假设我想stack在我的C代码中使用两个单独的s ...使用上面的代码,我将如何处理它?

c oop stack instance

1
推荐指数
2
解决办法
418
查看次数

标签 统计

c ×6

oop ×3

inheritance ×2

c++ ×1

c11 ×1

c89 ×1

design-patterns ×1

factory ×1

gcc ×1

history ×1

instance ×1

stack ×1

struct ×1