不同编译器的不同输出 - C 和 C++

发布于 2024-10-28 05:08:36 字数 58 浏览 1 评论 0原文

您能想到“一个程序”可以为“C 和 C++ 编译器提供不同的输出”(但在同一语言下提供一致的输出)吗?

Can you think of 'a program' which gives 'different outputs for a C and a C++ compilers' (yet gives consistent output under the same language)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

雨落星ぅ辰 2024-11-04 05:08:36

该程序在 C++ 或 C99 中生成 12,在 C89 中生成 6

#include <stdio.h>

int main()
{
    int a = 12//**/2;
    ;

    printf("%d\n", a);
    return 0;
}

This program produces 12 in C++ or C99, and 6 in C89:

#include <stdio.h>

int main()
{
    int a = 12//**/2;
    ;

    printf("%d\n", a);
    return 0;
}
夏末 2024-11-04 05:08:36

ISO C 和 ISO C++ 之间的不兼容性

一个常见的示例是 sizeof('A') ,在 C 中通常为 4,但在 C++ 中始终为 1,因为像 'A' 这样的字符常量在 C 中具有 int 类型,但在 C++ 中具有 char 类型> 在 C++ 中:

#include <stdio.h>

int main(void)
{
    printf("%d\n", sizeof('A'));
}

Incompatibilities between ISO C and ISO C++

A common example is sizeof('A'), which is usually 4 in C but always 1 in C++, because character constants like 'A' have the type int in C but the type char in C++:

#include <stdio.h>

int main(void)
{
    printf("%d\n", sizeof('A'));
}
大海や 2024-11-04 05:08:36
int main() { return sizeof 'a'; }
int main() { return sizeof 'a'; }
如果没有你 2024-11-04 05:08:36
typedef char X;
int main() {
    struct X { double foo; }
    printf("%d\n", sizeof(X));
    return 0;
}
typedef char X;
int main() {
    struct X { double foo; }
    printf("%d\n", sizeof(X));
    return 0;
}
子栖 2024-11-04 05:08:36

来自 wikipedia,进行修改以在每种语言中产生一致的输出:

extern int T;

int size(void)
{
    struct T {  int i;  int j;  };

    return sizeof(T) == sizeof(int);
    /* C:   return 1
    *  C++: return 0
    */
}

From wikipedia, altered to produce consistent output in each language:

extern int T;

int size(void)
{
    struct T {  int i;  int j;  };

    return sizeof(T) == sizeof(int);
    /* C:   return 1
    *  C++: return 0
    */
}
晚风撩人 2024-11-04 05:08:36
int class;

不会在 C++ 中编译,会在 C 中编译。

int class;

Will not compile in C++ and will compile in C.

一直在等你来 2024-11-04 05:08:36
#include <stdio.h>
int main(void)
{
#ifdef __cplusplus
    puts("C++");
#else
    puts("C");
#endif
    return 0;
}
#include <stdio.h>
int main(void)
{
#ifdef __cplusplus
    puts("C++");
#else
    puts("C");
#endif
    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文