c – 没有类的对象 – ‘clean C’中的数据模型
我曾在一些中型项目上与C合作,但我从未在C中做过任何认真的编程.
阅读this article后,我开始想知道如何在没有类和异常的情况下使用C 11.我曾经听过清洁C.清洁C应该是一个C代码,它不使用ANSI C没有的C功能,比如类或元编程. 有充足的资源如何有效地在C中做事,以及如何在C中做.但是很难找到任何有关如何充分利用这两个方面的资源. 我的问题分为两部分: >在没有命名空间,异常和元编程的情况下使用C是否有任何好的资源?书籍,开源项目? – #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 但标准库抛出异常!并且提升也是如此! 我没有使用异常的事实并不意味着我无法处理来自外部库的异常.这只是意味着我想在系统中以不同方式管理问题. 解决方法
因为没有一个.做这种事情的唯一原因是因为你非常渴望兼容性 – 例如,Lua是用“干净的C”编写的.根本没有什么“最好的”. 这只是C代码假装是可怕的C代码.它不是C代码,而是兼容的.关于“干净的C”没有比普通的C更好的了. 编辑:你,先生提问者,似乎不知道WTF“干净的C”甚至是.它正在制作你的源代码,甚至是实现,编译为C的C代码.没有名称空间,没有类型,没有常量,没有任何东西. C-with-a-C-interface是一个完全不同的东西,与清洁C完全无关.在这种情况下,没有理由限制你在实现中使用哪些C功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |