MSVC编译C代码遇C2371错误:bgz_error函数重定义求助
问题解决:MSVC下bgz_error重定义错误
核心原因分析
错误提示C2371: 'bgz_error': redefinition; different basic types说明编译器认为bgz_error被定义了两次,且类型不一致。最可能的场景是:
- 编译器先隐式声明了
bgz_error为int类型(C语言中,在函数定义前调用未声明的函数,编译器会默认推断其返回值为int),之后你定义了void类型的同名函数,导致类型冲突。 - 或者存在宏冲突,某个宏将
bgz_error替换成了其他内容,导致编译器识别异常。
解决方案
方案1:显式声明函数原型
在函数定义前添加显式声明,避免编译器隐式推断类型:
// 先声明函数原型 void bgz_error(); void bgz_error() { __debugbreak(); }
方案2:限制函数作用域
用static修饰函数,将其作用域限制在当前文件内,避免和其他文件的同名符号冲突:
static void bgz_error() { __debugbreak(); }
方案3:消除宏冲突
如果怀疑存在宏重名,在定义函数前先取消可能存在的宏定义:
#undef bgz_error void bgz_error() { __debugbreak(); }
附带的代码错误修正
你的代码里还有几个拼写和语法错误,需要一并修正才能正常编译:
ResiterClass→RegisterClass(Windows API函数名拼写错误)WS_MASIMIZEBOX→WS_MAXIMIZEBOX(窗口样式宏拼写错误)NOT→!(C语言无NOT关键字,逻辑非运算符为!)invlid_code_path→invalid_code_path(宏名拼写错误,否则会被编译器当作未知函数调用)
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

