如何解决在 Visual Studio 中编译时出现编译错误 C2048,但在 clang++ 中工作正常?
我尝试使用 clang 编译器编译以下示例代码,效果很好。
- 编译器详细信息:Apple clang 版本 12.0.0 (clang-1200.0.32.28)
- 目标:x86_64-apple-darwin20.1.0
#include <iostream>
#include <stdio.h>
int __cdecl printf(const char* format,...)
{
std::cout<<"My printf function"<<std::endl;
return 0;
}
int main()
{
printf("Standard printf function\n");
return 0;
}
但是,当我尝试在 Visual Studio 2019 或 g++ 中进行编译时,会出现编译错误。
错误 C2084:函数 'int printf(const char *const,...)' 已经有一个函数体
- msvc 编译失败的原因是什么?
- 我怎样才能让它发挥作用,我错过了什么?
解决方法
从您的代码中,您有意尝试使用您自己的 printf
函数版本。
预期会出现错误 C2084。你正在重新定义已经定义的东西。这是危险的,你要意识到你正在承担的风险。它是整个库的一部分,可能会出现任何 UB(未定义行为)。我不会玩那个。从我的角度来看,g++ 没有报告错误,但可能是 printf 的 g++/libc 原型与您编写的略有不同,或者甚至函数 printf 在头文件中声明但未在其中定义。
如果你真的想那样下去,我强烈建议你在另一个源文件中定义你的 printf
并在链接时隐藏 libc 实现。这应该是允许的(可能会出现警告和错误,但每个链接器都有一个覆盖)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。