user-0 提问: C语言有什么特性是C＋＋所没有的？

回复:
user: user-1
content: 引用 6 楼 mougaidong 的回复:我觉着C的不能面向对象，是C++没有的吧。 谁说C就不能面向对象的？！只是用起来稍微有点麻烦。

user: user-2
content: longjmp这个功能本身就比较汇编指令化，所以我武断地认为C++实现不了类似功能。

user: user-2
content: 引用 64 楼 zhm_whr 的回复:[quote=引用 61 楼 zhao4zhong1 的回复:] 我想知道，Start 1之后，cc和cb析构了吗？ 引用whr@8470p:/tmp$ longjmptest  Start 0 A() First a in B() b in C() c in c out b out ~C() a out ~B() a in B() b in C() c in Now jump Start 1 A() Second ~A()  确实没有[/quote] 那就不能叫C++也实现了longjmp吧。

user: user-3
content: 我也暂时没想出来 前置声明的确是个不同点 至少现在clang是这样 球大神解释

user: user-2
content: 引用 44 楼 u010142440 的回复:[quote=引用 27 楼 zhao4zhong1 的回复:] 哪个C++er试试用C++实现这个： #include <stdio.h> #include <setjmp.h> jmp_buf mark; int i=0; void c() {     printf( "c in\n");     if (1==i%2) longjmp( mark, i );     printf( "c out\n"); } void b() {     printf( "b in\n");     c();     printf( "b out\n"); } void a() {     printf( "a in\n");     b();     printf( "a out\n"); } void main( void ) {    int jmpret;    jmpret = setjmp( mark );    printf( "Start %d\n",jmpret);    if( jmpret == 0 ) {        printf( "First\n");        a();        i++;        a();    } else {        printf( "Second\n");    } } //Start 0 //First //a in //b in //c in //c out //b out //a out //a in //b in //c in //Start 1 //Second //  setjmp和longjmp,C++可以直接使[/quote] 跨类的上下文你再试试？！

user: user-4
content: 引用 24 楼 hepeizhong2010 的回复:再抽象的编程语言，最后不都变成汇编代码了吗？我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。  再美味的食物，最后不都变成屎了吗？我们完全可以说屎是美味的，喷香的，诱人的。  +++

user: user-5
content: 引用 46 楼 lin5161678 的回复:[quote=引用 16 楼 my3439955 的回复:] 有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明C也不正常好吧  别用某个编译器实现揣测 [/quote]  在C99标准之前，这种用法是合法的，但是编译器可以给出警告。不过这不能算是实用吧，容易出错倒是真的。

user: user-6
content: 引用 16 楼 my3439955 的回复:有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明C也不正常好吧  别用某个编译器实现揣测

user: user-7
content: /*下面代码在C++中可以编译通过,在C语言中编译不过*/ #include <stdio.h>  struct my_struct_s {         int a;         int b; };   int main() {         printf("%d",sizeof(my_struct_s)); }

user: user-7
content: 引用 27 楼 zhao4zhong1 的回复:哪个C++er试试用C++实现这个： #include <stdio.h> #include <setjmp.h> jmp_buf mark; int i=0; void c() {     printf( "c in\n");     if (1==i%2) longjmp( mark, i );     printf( "c out\n"); } void b() {     printf( "b in\n");     c();     printf( "b out\n"); } void a() {     printf( "a in\n");     b();     printf( "a out\n"); } void main( void ) {    int jmpret;    jmpret = setjmp( mark );    printf( "Start %d\n",jmpret);    if( jmpret == 0 ) {        printf( "First\n");        a();        i++;        a();    } else {        printf( "Second\n");    } } //Start 0 //First //a in //b in //c in //c out //b out //a out //a in //b in //c in //Start 1 //Second //  setjmp和longjmp,C++可以直接使

user: user-7
content: /*有啊,下面的代码是C++中编译不过,但C语言可以*/ #include <stdio.h>  g_n = 13;  int main() {     printf("%d",g_n); }

user: user-8
content: 引用 41 楼 my3439955 的回复:[quote=引用 40 楼 zjq9931 的回复:] [quote=引用 38 楼 my3439955 的回复:] [quote=引用 37 楼 zjq9931 的回复:] [quote=引用 36 楼 my3439955 的回复:] [quote=引用 35 楼 zjq9931 的回复:] [quote=引用 16 楼 my3439955 的回复:] 有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明 你说反了。。。[/quote]  哦？你确定？我记得是这样的啊[/quote] 确定的很。可以试试，在VC6上，.C的文件，必须要前置声明，.cpp的文件就不用前置声明。[/quote]  刚才已经试过了，我说的是对的[/quote] 我也试验过的啊，你是怎么验证的？[/quote]  我用了vc6 vc9 vc10 vc11都测过了[/quote] 怎么验证的，代码发下看看。

user: user-9
content: 引用 40 楼 zjq9931 的回复:[quote=引用 38 楼 my3439955 的回复:] [quote=引用 37 楼 zjq9931 的回复:] [quote=引用 36 楼 my3439955 的回复:] [quote=引用 35 楼 zjq9931 的回复:] [quote=引用 16 楼 my3439955 的回复:] 有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明 你说反了。。。[/quote]  哦？你确定？我记得是这样的啊[/quote] 确定的很。可以试试，在VC6上，.C的文件，必须要前置声明，.cpp的文件就不用前置声明。[/quote]  刚才已经试过了，我说的是对的[/quote] 我也试验过的啊，你是怎么验证的？[/quote]  我用了vc6 vc9 vc10 vc11都测过了

user: user-8
content: 引用 38 楼 my3439955 的回复:[quote=引用 37 楼 zjq9931 的回复:] [quote=引用 36 楼 my3439955 的回复:] [quote=引用 35 楼 zjq9931 的回复:] [quote=引用 16 楼 my3439955 的回复:] 有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明 你说反了。。。[/quote]  哦？你确定？我记得是这样的啊[/quote] 确定的很。可以试试，在VC6上，.C的文件，必须要前置声明，.cpp的文件就不用前置声明。[/quote]  刚才已经试过了，我说的是对的[/quote] 我也试验过的啊，你是怎么验证的？

user: user-10
content: 引用 8 楼 u013344873 的回复:引用 7 楼 fgrsskdsm 的回复:[quote=引用 6 楼 mougaidong 的回复:] 我觉着C的不能面向对象，是C++没有的吧。。。。。。。。。。。。  好答案.....[/quote]

user: user-9
content: 引用 37 楼 zjq9931 的回复:[quote=引用 36 楼 my3439955 的回复:] [quote=引用 35 楼 zjq9931 的回复:] [quote=引用 16 楼 my3439955 的回复:] 有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明 你说反了。。。[/quote]  哦？你确定？我记得是这样的啊[/quote] 确定的很。可以试试，在VC6上，.C的文件，必须要前置声明，.cpp的文件就不用前置声明。[/quote]  刚才已经试过了，我说的是对的

user: user-8
content: 引用 36 楼 my3439955 的回复:[quote=引用 35 楼 zjq9931 的回复:] [quote=引用 16 楼 my3439955 的回复:] 有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明 你说反了。。。[/quote]  哦？你确定？我记得是这样的啊[/quote] 确定的很。可以试试，在VC6上，.C的文件，必须要前置声明，.cpp的文件就不用前置声明。

user: user-9
content: 引用 35 楼 zjq9931 的回复:[quote=引用 16 楼 my3439955 的回复:] 有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明 你说反了。。。[/quote]  哦？你确定？我记得是这样的啊

user: user-8
content: 引用 16 楼 my3439955 的回复:有一点略实用： int f1(void) {     return f2(); }  int f2(void) {     return 0; }  此段代码在c中正常，c++编译不过。根本原因，c不要求前置声明 你说反了。。。

user: user-11
content: 蛋疼的问题，C11里边的新东西C++里面肯定没有啊，C99的一些东西C++里面也没有。