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

是否有任何一种脚本在C和C++中都有效,在用每种语言中的标准编译器编译时都会产生different种行为?

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

  • 与预处理器无关(这意味着没有对#ifdef __cplusplus、pragmas等的攻击)
  • 两种语言中定义的任何实现都是相同的(例如数字限制等)
  • 我们正在比较每个标准的合理最新版本(例如,C++98和C90或更高版本)

推荐答案

下面的C和C++中的有效值将(最可能)在C和C++中的i中产生不同的值:

int i = sizeof('a');

See Size of character ('a') in C/C++ for an explanation of the difference.

this article分中的另一个:

#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;
}

C++相关问答推荐

命名信号量不会像进程之间同步中假设的那样工作

由于未签名int导致的运行时错误"

C限制限定符是否可以通过指针传递?

需要大整数和浮点数.使用long long int和long double

创建一个fork导致fget无限地重新读取文件

fwrite无法写入满(非常大)缓冲区

为什么我不能只在内存地址中添加一个int来寻址任何数组?

如何在C中只对字符串(包含数字、单词等)中的数字进行重复操作?

为什么WcrTomb只支持ASCII?

如何在不读取整个字符串的情况下删除UTF8字符串的尾随空格以提高性能?

如何在不更改格式说明符的情况下同时支持双精度和长双精度?

如何使用calloc和snprintf

在C中使用字符串时是否不需要内存分配?

程序打印一些随机空行

使用 strtok 多次分割一个字符串会导致意外行为

传递参数:C 和 C++ 中 array 与 *&array 和 &array[0] 的区别

cs50拼写器分配中的无限循环

保存有符号整数结果的变量是否会溢出(后增量的副作用),并且此后从未在任何表达式中使用过它,是否会导致 UB?

`void foo(int a[static 0]);` 有效吗?

在 C23 之前如何对空指针使用nullptr?