VS2015抱怨printf没有内联

时间:2018-03-12 22:52:57

标签: c++ visual-studio-2015 printf

我正在使用VS2015和/ Wall编译C ++文件。 我正在使用printf功能。

我明白了:

warning C4710: 'int printf(const char *const ,...)': function not inlined

我理解内联。我在MS环境中看到__forceinline的帮助。我只是不明白为什么VS2015没有通过stdio.h正确使用它并仍然生成警告。

我的stdio.h文件在这里:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt

有没有办法摆脱这个?

编辑:

好的示例代码如下:

int main(int argc, char** argv){
  printf("Hello World\n");
  return 0;
};

至于我是否想使用C或C ++,我目前正在使用Windows进行开发,但该文件最终将在HPUX上编译为C.如果这是警告的原因,我也想知道。

1 个答案:

答案 0 :(得分:1)

编译器尝试内联某些功能(在本例中为printf(),以实现性能或磁盘空间,如here in the documentation所述。但是,您可以通过以下方式禁用这些警告:

#ifdef _WIN32
#pragma warning (disable : 4710)
#endif

或在CMake中:

if (CMAKE_C_COMPILER_ID STREQUAL "MSVC")
  set(CMAKE_C_FLAGS "/wd4710") 
endif()

编辑:

在现代惯用的CMake中,最好避免直接编辑CMAKE_C_FLAGS变量。

您可以改为执行以下操作。

add_compile_options(
  $<$<C_COMPILER_ID:MSVC>:/wd4710>
)

或者您甚至可以仅针对单个目标禁用警告

target_compile_options(YourTargetName
  $<$<C_COMPILER_ID:MSVC>:/wd4710>
)