为什么C和C+中相同代码的对象文件大小会发生变化+; 我在Visual Studio 2008的C和C++构建环境中编写了相同的代码行,但是C代码的对象文件大小是5.5KB,C++代码文件大小是6.17 KB。为什么会有这种差异

为什么C和C+中相同代码的对象文件大小会发生变化+; 我在Visual Studio 2008的C和C++构建环境中编写了相同的代码行,但是C代码的对象文件大小是5.5KB,C++代码文件大小是6.17 KB。为什么会有这种差异,c++,c,C++,C,以下是两种环境中的代码: #include <stdio.h> struct S { char c; }; void func() { int i; int j; printf("%d", i); } int main() { struct S s; return 0; } #包括 结构 { 字符c; }; void func() { int i; int j; printf(“%d”,i); } int main() { 结构;

以下是两种环境中的代码:

#include <stdio.h>

struct S
{
    char c;
};
void func()
{
    int i;
    int j;
    printf("%d", i);
}

int main()
{
    struct S s;
    return 0;
}
#包括
结构
{
字符c;
};
void func()
{
int i;
int j;
printf(“%d”,i);
}
int main()
{
结构;
返回0;
}

它在每种情况下都链接不同的C运行库。详细解释。例如,
libcmt.lib
vs
libcpmt.lib
include文件
stdio.h
对C++的编译要复杂得多,因为它可能在iostreams函数之上派生stdio函数。对于直接的C编译,不使用iostream。因此,对象文件在C中较小


编辑

我认为很多选民并不理解这个问题。OP询问对象文件的大小为何增加。不是可执行文件。不是图书馆


在查看了VS2008的stdio.h之后,我发现
C++
C
的编译差异并不像
gcc
的编译差异那么显著,这是我最初回答的基础。但是,名称空间和外部符号的符号会使对象文件变大。

只是因为您的代码在C和C++中有不同的含义。p>
    在C++中,你声明函数 不接收任何参数,用C语言编写 声明具有 未指定参数数。(切勿更改
    main
    的签名)
  • 函数名在C中被损坏++
  • 函数在C中可能抛出异常++
  • 可执行文件链接到 默认情况下不同的库
  • 因为缺少初始化 对
    i
    printf
    调用 未定义的行为。两种语言 可能会决定不同的策略 向你开枪

为什么会这样?因为代码是相同的,所以我认为,应该把相同的部分链接起来。因为C和C++是不同的编程语言。@ Vikas:在C++中,需要有代码来处理异常或C++特定的分配(“新建”、“删除”)。您可以尝试禁用C++项目中的异常处理,并且应该降低文件大小。这就是“不同”的意思它更大,因为越大越好。我希望这不是你面试时的问题。虽然所有这些都是真的,但唯一突出的一点是链接的一组库。@Adam:不确定,他说的是对象文件,不是可执行文件。就我在我的机器上所能看到的,区别在于符号表的大小。对我来说,C++版本正好有三个外部符号被提及,对于C++来说,有更多的内容。