小编典典

在 C 和 C++ 中都有效的代码在用每种语言编译时会产生不同的行为吗?

all

C 和 C 有很多不同之处,并非所有有效的 C 代码都是有效的 C 代码。
(“有效”是指具有已定义行为的标准代码,即不是特定于实现/未定义/等。)

当使用每种语言的标准编译器编译时,在 C 和 C++ 中都有效的一段代码是否会产生 不同的行为?

为了使它成为一个合理/有用的比较(我试图学习一些实际有用的东西,而不是试图在问题中找到明显的漏洞),让我们假设:

  • 没有与预处理器相关的东西(这意味着没有 hack #ifdef __cplusplus, pragma 等)
  • 任何实现定义在两种语言中都是相同的(例如数字限制等)
  • 我们正在比较每个标准的最新版本(例如,C++98 和 C90 或更高版本)
    如果版本很重要,那么请说明每个标准的哪些版本会产生不同的行为。

阅读 92

收藏
2022-03-03

共1个答案

小编典典

以下在 C 和 C 中有效,将(很可能)i在 C 和 C 中产生不同的值:

int i = sizeof('a');

这篇文章的另一个:

#include <stdio.h>

int  sz = 80;

int main(void)
{
    struct sz { char c; };

    int val = sizeof(sz);      // sizeof(int) in C,
                               // sizeof(struct sz) in C++
    printf("%d\n", val);
    return 0;
}
2022-03-03