当前位置: 首页 > 知识库问答 >
问题:

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

闾丘晨
2023-03-14

在任何情况下,一段在C和C++中都有效的代码在用每种语言的标准编译器编译时会产生不同的行为吗?

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

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

共有1个答案

卫博
2023-03-14

以下在C和C++中是有效的,将(很可能)在C和C++中的i中导致不同的值:

int i = sizeof('a');

请参阅C/C++中的字符大小('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;
}
 类似资料:
  • C代码是否可能同时符合C 03标准和C 11标准,但根据编译标准的不同,可以做不同的事情?

  • 我正在尝试编译并运行以下程序,而不使用中的函数。我使用以下命令编译了程序。 编译器发出警告 好的,没问题。然后,我已经运行了可执行文件(a.out),两个< code>printf语句都打印成功,然后得到分段错误。 所以,我的问题是,为什么成功执行打印语句后会出现分段错误? 我的代码: 输出: 注意: 在这里, gcc 标志阻止编译器在链接时使用标准启动文件

  • 上一个小节 C 语言的程序结构中我们简单的认识了一下 C 语言的程序到底由那些部分组成,但是仅仅了解 C 语言的程序结构还不够,仅仅是万里长征走完了第一步,后面还需要进行很多的步骤才能让程序成为一个可以使用的工业产品。还记的上一个小节中我们提到的 gcc 吗?其实这是一个 C 语言的编译器,这一个小节我们就来学习一下编译器这个概念。 1. C 语言编译器 每个语言都需要编译器,甚至包括可以直接操作

  • 代码不编译。我不明白错误是什么,请帮忙) 错误文本:g-Wall-c“main.cpp”(/media/ad/4GB-NTFS/prog/laba2)main。cpp:In函数“int main()”:main。cpp:46:12:错误:调用“Record::Record()”记录r1;^主要的cpp:12:1:注意:候选者:Record::Record(std::\u cxx11::string

  • 本文向大家介绍编写一个在C和C ++编程中产生不同结果的程序,包括了编写一个在C和C ++编程中产生不同结果的程序的使用技巧和注意事项,需要的朋友参考一下 编写一个可编译并在c和c ++中运行并产生不同结果的程序。 使用c和c ++进行编译时,有多种类型的程序会给出不同的结果。 一世。使用字符字面量-c和c ++都以不同的方式对待字符。在C中,它们被视为整数文字,而在C ++中,它们被视为字符。

  • 第19.3节介绍了一章中的字符串表示法,其主要重点是运算符重载,特别是特殊运算符