我正在使用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.如果这是警告的原因,我也想知道。
答案 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>
)