📜  代码在C和C++中均有效,但产生不同的输出

📅  最后修改于: 2021-05-26 01:50:47             🧑  作者: Mango

有一些语法结构对C和C++均有效,但是在两种语言中编译和运行时,它们的行为却不同。

还可以利用几种差异来创建可以两种语言编译但行为不同的代码。例如,以下函数将在C和C++中返回不同的值:

示例代码在C和C++中均有效,但在编译时给出不同的答案:

// C code that is valid in both
// C and C++ but produce different
// behavior when compiled.
  
#include 
  
// extern keyword for variable
// declaration without define
extern int S;
  
// function for struct
int differCAndCpp(void)
{
    // create a structure
    struct S {
        int a;
        int b;
    };
  
    // return sizeof integer variable
    return sizeof(S);
}
// Main driver
int main()
{
    // call function differCAndCpp()
    printf("%d", differCAndCpp());
    return 0;
}

输出:

4

C++中的代码

// C++ code that is valid in both
// C and C++ but produce different
// behavior when compiled.
  
#include 
using namespace std;
  
// extern keyword used for variable
// declaration without define
extern int S;
  
// function for struct
int differCAndCpp(void)
{
    // create a structure
    struct S {
        int a;
        int b;
    };
  
    // return sizeof structure
    // in c++
    return sizeof(S);
}
  
// Main driver
int main()
{
    // call function differCAndCpp()
    printf("%d", differCAndCpp());
    return 0;
}

输出:

8

我们可以看到,两个代码相同,但输出却不同。这是由于C要求在结构标签前面加上struct(因此sizeof(S)表示变量),但是C++允许省略它(因此sizeof(S)表示隐式typedef)。

请注意,将extern声明放在函数内部时,结果是不同的:然后,在函数范围中存在具有相同名称的标识符会禁止隐式typedef在C++中生效,而C和C++的结果将是相同的。还要注意的是,上面示例中的歧义是由于在括号中使用了sizeof运算符。

使用sizeof T会期望T是一个表达式而不是类型,因此该示例在C++中不会给出相同的结果。

相关文章:

  • C和C++中的Struct之间的区别
  • 编写一个在C和C++中产生不同结果的程序

参考:-https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”