举一个C语言能做,C++无法做到的例子,

举一个C语言能做,C++无法做到的例子,呵呵……
由于最近很多喷C++的,比如下面这个蛋疼贴:
讨厌&&鄙视C++

那偶非常想有请这些Linus粉丝们,或者纯C语言的忠实粉丝们能举一些切切实实的例子,来说明C语言能做,但C++就不行了,呵呵呵呵呵……

我周五前会给出自己的一些例子,如果没有提到的话,呵呵。


------解决方案--------------------
探讨

C++ 兼容C

------解决方案--------------------
变长数组 ?
------解决方案--------------------
另外一个是 C++的应用程序二进制接口(ABI)没有标准化。

所以现在Python,Ruby,Java的扩展都是C接口的(虽然扩展本身可以是C++的,但是接口都是C的);
不能用C++的classes/interfaces作为接口扩展.
------解决方案--------------------
探讨

引用:

变长数组 ?


呵呵,不愧是版主大侠,说中了一个……
这四颗星星确实不是只用来摆显的,呵呵。

------解决方案--------------------
探讨

另外一个是 C++的应用程序二进制接口(ABI)没有标准化。

所以现在Python,Ruby,Java的扩展都是C接口的(虽然扩展本身可以是C++的,但是接口都是C的);
不能用C++的classes/interfaces作为接口扩展.

------解决方案--------------------
晕,这样也算啊

C里面enum是int型的,C++里面不是,要看情况而定
C支持K&R函数,即不声明可使用,C++不行
C99支持designated initializers.C++没有
C里面可以. int fun(); 调用时 fun(1,2,3) C++不行
C里面可以这样声明函数 int fun( enum{a,b,c,d} param);而C++不行

这些不支持的东西都是无伤大雅的,C++里可以有Work Around的方法
------解决方案--------------------
楼主应该把题目改成,什么东西C编译器能做到而C++编译器不能做到

再来一个奇怪的东西 Compound Literals
C/C++ code

struct foo {int a; char b[2];} structure;
int x = 1;
int y = 2;
structure = ((struct foo) {x + y, 'a', 0});

------解决方案--------------------
我也来说两个:
1. 下面的代码在C可以很好地通过编译,但在C++中不行。在C++中,不能implicit地将void* 转换成其它类型的指针。
C/C++ code

int *x = malloc(sizeof(int) * 10);

------解决方案--------------------
这样的写法C合法,C++不合法
C/C++ code

struct aaa{
    int a;
};

typedef struct bbb{
    int b;
}aaa;

struct aaa x1 = {1};
aaa x2 = {2};

------解决方案--------------------
C/C++ code

struct A
{
    struct B
    {
        struct C
        {
            int i;
        };
    };
};
struct A a = {1};

------解决方案--------------------
变长数组C++不能实现?C的怎么实现变长数组的?
可变数组的基础不就是用一个指针来访问数组?只要保证话所说的扩充之后要访问的新内存地址是有效的,这样就实现了。realloc就是解决办法。
可变参数,不用你认为的C语法 "...",这个函数的定义就是解决办法: int wvsprintf(
LPTSTR lpOutput, // pointer to buffer for output 
LPCTSTR lpFormat, // pointer to format-control string 
va_list arglist // variable argument list of format-control arguments 
);
VC中va_list的typedef是char *,它只是一个指向保存着各个参数的数组。

拘泥这个做什么,C++的初衷本来就是方便实现功能时而对C所做的扩展,又不是面向快速开发的扩展,想快速开发就用脚本语言,想写一个有用的程序,就用C++。别提那种负责在各个系统API或者库函数直接传递参数的代码,用易语言可以跟你用C++写的一样好。
想纠缠在编译器怎么编译实现东西的,要我说,就学linux的话,别人学C++,是去看XX的源码。那你要学编译器的特点,就学点汇编去看看你想了解的编译器所编译出来的程序是什么样的,这个我可以一起交流交流,平时的工作也主要是负责各种东西的反编译的,汉化东西这些。

说起C++的问题,还真有一个让我恨不得把整个地球,不对,整个宇宙插进C++设计者菊花的东西。虽然这样设计应该是有利有弊,但抓狂这个问题所消耗的时间实在是太长了。我曾想写一个很方便的类,只要配置好这个类初始化中自动会读取的那个ini文件就可以完成给目标DX程序自定义字体的功能,其实这个类是HOOK了目标DX程序的几个和画字以及与字体相关的几个API,当然我会想把HOOK API后要执行的新代码也放到类的成员里面,这时候就碰到一个非常操蛋的问题,只要是类成员,无论是不是虚函数,要操作这个函数的地址就都必须带上类名称作为命名空间前缀,this指针,多线程,可重入,这些都可以处理.但必须带类前缀,这个就XX了,很XX,难不成我得写一整套的和这个特殊的XX地址相配套的函数出来,单独给一个类的一个单独函数写一整套内存操作、功能实现等等的代码?仅仅就是因为一个类的一个函数的地址不能转换成不带类前缀的类型?
/:^] 当然,后来用一个类初始化函数时需要制定一个函数地址的方式,每次实例化这个类,就要写一个外部对应于特定类实例的函数解决问题了。
------解决方案--------------------