可能重复:
Is this a legitimate C++ code?
“C subset of C++” -> Where not ? examples ?
有人能想出一段用gcc或任何其他C编译器编译的代码,并且不编译g ++或任何其他C ++编译器吗?
更新: 我并不只是指关键字
UPDATE2: 谢谢大家的答案。显然,主持人不像我对C和C ++之间的细微差别那样热情。
UPDATE3: 主持人:你能否按照你的建议将它与我之前关于这个主题的问题合并?将这两个问题放在一起是完全合理的。
答案 0 :(得分:8)
#include <stdlib.h>
int main()
{
char* s = malloc(128);
return 0;
}
这将使用gcc进行编译,但不能使用g ++进行编译。 C ++需要在void*
进行显式转换,而C则不需要。
答案 1 :(得分:4)
int main(int argc, char **class)
{
return !argc;
}
编辑:另一个例子
int foo();
int main(void) {
return foo(42);
}
int foo(int bar) {
return bar - 42;
}
答案 2 :(得分:3)
尝试
extern int getSize();
int main()
{
char x[getSize()];
x[0] = 0;
}
int getSize()
{
return 4;
}
请记住使用严格标志进行编译。
> gcc -pedantic -std=c99 t.c
> g++ -pedantic t.c
t.c: In function `int main()':
t.c:6: error: ISO C++ forbids variable length array `x'
答案 3 :(得分:2)
怎么样
/* Within a function */ { enum {foo} bar; bar++; }
这似乎是C ++设计中一个相当大的突破性变化,但它就是它。
答案 4 :(得分:2)
字符大小如何:
更糟糕的是它编译但在运行时产生不同的输出。
#include <stdio.h>
int main()
{
fprintf(stdout, "%s\n", (sizeof('\xFF') == sizeof(char))?"OK":"Fail");
}
> gcc -pedantic t.c
> ./a.exe
Fail
> g++ -pedantic t.c
> ./a.exe
OK
这实际上让我们想知道为什么会有效?
fprintf(stdout, "%c%c\n", 'A', 'B');
即使对象的大小不同,它也适用于两个编译器。
答案 5 :(得分:1)
void*
上的指针算术:
void* t;
t++; // compiles only in gcc