用gcc而不是g ++编译的代码片段

时间:2010-12-07 00:30:49

标签: c++ c gcc g++ coding-style

  

可能重复:
  Is this a legitimate C++ code?
  “C subset of C++” -> Where not ? examples ?

有人能想出一段用gcc或任何其他C编译器编译的代码,并且不编译g ++或任何其他C ++编译器吗?

更新: 我并不只是指关键字

UPDATE2: 谢谢大家的答案。显然,主持人不像我对C和C ++之间的细微差别那样热情。

UPDATE3: 主持人:你能否按照你的建议将它与我之前关于这个主题的问题合并?将这两个问题放在一起是完全合理的。

6 个答案:

答案 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