加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 没有类的对象 – ‘clean C’中的数据模型

发布时间:2020-12-16 10:43:26 所属栏目:百科 来源:网络整理
导读:我曾在一些中型项目上与C合作,但我从未在C中做过任何认真的编程. 阅读this article后,我开始想知道如何在没有类和异常的情况下使用C 11.我曾经听过清洁C.清洁C应该是一个C代码,它不使用ANSI C没有的C功能,比如类或元编程. 有充足的资源如何有效地在C中做事,
我曾在一些中型项目上与C合作,但我从未在C中做过任何认真的编程.

阅读this article后,我开始想知道如何在没有类和异常的情况下使用C 11.我曾经听过清洁C.清洁C应该是一个C代码,它不使用ANSI C没有的C功能,比如类或元编程.

有充足的资源如何有效地在C中做事,以及如何在C中做.但是很难找到任何有关如何充分利用这两个方面的资源.

我的问题分为两部分:

>在没有命名空间,异常和元编程的情况下使用C是否有任何好的资源?书籍,开源项目?
>请查看这段简单的代码,这是我第一次尝试处理C 11中提到的子集中的数据结构和字符串.我首先想到的是代码冗余.你有什么不同的做法,为什么?

#include <cstring>

namespace addressbook {
namespace contact {

struct contact {
    char* name;
    char* email;
};

void initialize(addressbook::contact::contact* contact)
{
    contact->name = nullptr;
    contact->email = nullptr;
}

void deinitialize(addressbook::contact::contact* contact)
{
    delete[] contact->name;
    delete[] contact->email;
}

void set_name(addressbook::contact::contact* contact,char* name)
{
    delete[] contact->name;
    contact->name = new char [strlen(name) + 1];
    std::strcpy(contact->name,name);
}

void set_email(addressbook::contact::contact* contact,char* email)
{
    delete[] contact->email;
    contact->email = new char [strlen(email) + 1];
    std::strcpy(contact->email,email);
}

} // namespace contact
} // namespace addressbook

int main()
{
    namespace c = addressbook::contact;

    c::contact jimmy;

    c::initialize(&jimmy);

    c::set_name(&jimmy,const_cast<char*>("Jimmy Page"));
    c::set_email(&jimmy,const_cast<char*>("jp@example.com"));

    c::deinitialize(&jimmy);

    return 0;
}

请怜悯我 – 我是一个结构编程新手.

为什么不只是C呢?

命名空间,新/删除,标准库算法,增强库,C 11酷功能 – 仅举几例.

为什么在没有构造函数/析构函数时使用new / delete?

因为类型安全. malloc返回* void

但标准库抛出异常!并且提升也是如此!

我没有使用异常的事实并不意味着我无法处理来自外部库的异常.这只是意味着我想在系统中以不同方式管理问题.

解决方法

But it’s surprisingly hard to find any resources on how to take the
best of both worlds.

因为没有一个.做这种事情的唯一原因是因为你非常渴望兼容性 – 例如,Lua是用“干净的C”编写的.根本没有什么“最好的”.

这只是C代码假装是可怕的C代码.它不是C代码,而是兼容的.关于“干净的C”没有比普通的C更好的了.

编辑:你,先生提问者,似乎不知道WTF“干净的C”甚至是.它正在制作你的源代码,甚至是实现,编译为C的C代码.没有名称空间,没有类型,没有常量,没有任何东西. C-with-a-C-interface是一个完全不同的东西,与清洁C完全无关.在这种情况下,没有理由限制你在实现中使用哪些C功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读