用Visual Studio c++编译器编译C代码有任何(与性能相关的)缺点吗?

Is there any (performance-related) downside to compiling C code with the Visual Studio C++ compiler?

本文关键字:性能 缺点 任何 c++ Studio Visual 编译器 编译 代码      更新时间:2023-10-16

这是我第一次使用Visual Studio(2010)开发,我注意到:

int *x = malloc(sizeof(int) * 50);
当我试图构建"main.c"时,

给出一个错误。我猜想这是因为VS使用c++编译器来构建C程序。

由VS为C生成的代码是否与Windows下的代码一样好,或者我应该寻找更好的和/或专属于C的代码?

我认为这是因为VS正在使用c++编译器来构建C程序。

你的假设是不正确的:那行代码没有任何问题,事实上Visual c++将编译它没有错误:

c:dev>type stubby.c
#include <stdlib.h>
int main(void)
{
    int *x = malloc(sizeof(int) * 50);
}
c:dev>cl stubby.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
stubby.c
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.
/out:stubby.exe
stubby.obj
c:dev>

Visual c++是否适合你的需求取决于你的需求是什么。它不支持C99;如果对C99的支持对您很重要,那么您将需要寻找另一个编译器。它不支持过多的GNU语言扩展;如果这些对您很重要,您将需要寻找另一个编译器。

  1. 这与性能无关;这是一种语言限制。在c++中,需要强制转换:

    int *x = (int*)malloc(sizeof(int) * 50);
    
  2. 除了Visual c++编译器,还有其他的Windows编译器;例如,看看g++ (MinGW GCC的一部分)。

  3. 一般来说,C编译器比c++编译器能更好地进行优化。但我不认为在c++模式下使用相同的编译器比在C模式下运行它有任何区别,至少不是典型的。

我不使用Visual Studio编译器纯粹是因为它不兼容C99,我发现C99更容易工作。

我个人使用MinGW + GCC代替,但我使用notepad++代替Visual Studio。我知道使用GCC编译Visual Studio是绝对可能的,但我还不知道有人这样做过。