Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C++;C语言中的可能性_C - Fatal编程技术网

使用C++;C语言中的可能性

使用C++;C语言中的可能性,c,C,这可能是个愚蠢的问题,但我对此非常感兴趣。是否可以用纯C实现操作符new,动态扩展数组和类? 任何链接或代码示例将不胜感激 new:#定义新的(类型)malloc(sizeof(类型))(必须使用函数语法调用它,比如struct stat*st=new(struct stat)) 动态扩展数组:realloc加上一些自定义数组操作函数(如push_back等)——这通常由第三方C实用程序库实现(正如@Mgetz所指出的,一些编译器为其内置扩展) 类:具有函数指针成员的结构(这在一些项目中非常常

这可能是个愚蠢的问题,但我对此非常感兴趣。是否可以用纯C实现操作符
new
,动态扩展数组和类? 任何链接或代码示例将不胜感激

  • new
    #定义新的(类型)malloc(sizeof(类型))
    (必须使用函数语法调用它,比如
    struct stat*st=new(struct stat)
  • 动态扩展数组:
    realloc
    加上一些自定义数组操作函数(如
    push_back
    等)——这通常由第三方C实用程序库实现(正如@Mgetz所指出的,一些编译器为其内置扩展)
  • 类:具有函数指针成员的结构(这在一些项目中非常常见,例如Linux内核)

您可能想看看GObject,它是一个C库,为C提供了一些面向对象的功能。还可以看到您通过谷歌搜索“面向对象C”获得的几十个点击量。

这取决于您是否可以重新实现编译器。 如果可以-您可以随心所欲,否则:

新建-作为运算符-否,但您可以定义一个函数+宏来模拟它。 课程-是的,你可以。您可以使用静态函数和指向函数的指针数组非常接近地模拟它。但不会出现过载。
正在扩展阵列-是的,使用上面的类模拟。

谷歌快速搜索显示:

我还没看完,但听起来像是你要找的

是的,在C语言中实现面向对象是可能的(常见的?),或者至少是特别需要的位

例如,通过将指向malloced内存的指针和free函数存储在链接列表中,一次创建了一个垃圾收集器


C最好的地方是它可以正常工作,并且几乎没有开销。一种语言自动为您做的工作越多,就意味着会有更多的开销——尽管情况并非总是如此。

主题太宽泛了,但请查看这本关于C中OOP的免费书籍:@ddriver,谢谢链接。非常有用的。很明显,你可以在C中完成这些事情,因为Stoustrop的第一个C++编译器输出C。但是它有很多工作。@ LeeDaNeelCrkk-然后C++有一个小部分的特征。因此,它不应该是那么多的工作,尤其是如果你编写一个codegen而不是手工编写的话。它根本不是重新实现编译器,而是它的一小部分!此外,它将使OP了解其他工作方式!不要给别人对荒谬事物的错误印象@如果这对你来说是荒谬的,那并不意味着对每个人都是荒谬的。当然,我并不是想从头开始重建它——但是你可以在编译代码中实现一些特性,或者使用UTIL,比如或者其他SGCC自己的特性,它们完成了OP的大部分要求。虽然这些都是用C++转换逐步淘汰的,如果用户要定义一个<代码>新的<代码>宏,很有可能在<代码> >guard@ddriver不应该是最有可能的,必须在这样一个区块内完成。重新定义关键字是C++ +MGETZ中的编译错误:假设OP想要与C++代码完全交互。请记住,C和C++是不同的语言,它们共享一个共同的起源,因此“最有可能”而不是“必须”。