草庐IT

c++ - extern "C"在 C 中是否有任何影响?

我刚刚得到一些使用extern"C"来声明外部函数的C代码,如下所示:extern"C"voidfunc();这是有效的C吗?我在这一行遇到错误,但我不确定是因为这个还是其他原因。 最佳答案 不,它不是有效的C。它只能在C++代码中用于引用在C代码中定义的函数。extern"C"应该包含在ifdef__cplusplus/#endifblock中://Foronefunction#ifdef__cplusplusextern"C"#endifvoidfunc();//Formorethanonefunction#ifdef__cpl

C++ fatal error LNK1120 : 1 unresolved externals

是什么导致了这个错误?我用谷歌搜索了它,我发现的前几个解决方案是库和主要功能有问题,但在我的问题上似乎都很好,我什至都重新输入了!这可能是什么原因造成的?这可能会有所帮助:MSVCRTD.lib(crtexew.obj):errorLNK2019:unresolvedexternalsymbolWinMain@16referencedinfunction__tmainCRTStartup#includeusingnamespacestd;intmain(){constdoubleA=15.0,B=12.0,C=9.0;doubleaTotal,bTotal,cTotal,total;i

C++ fatal error LNK1120 : 1 unresolved externals

是什么导致了这个错误?我用谷歌搜索了它,我发现的前几个解决方案是库和主要功能有问题,但在我的问题上似乎都很好,我什至都重新输入了!这可能是什么原因造成的?这可能会有所帮助:MSVCRTD.lib(crtexew.obj):errorLNK2019:unresolvedexternalsymbolWinMain@16referencedinfunction__tmainCRTStartup#includeusingnamespacestd;intmain(){constdoubleA=15.0,B=12.0,C=9.0;doubleaTotal,bTotal,cTotal,total;i

c++ - 使用 extern c 和 dllexport 与模块定义 (msvc++) 进行标准调用名称修改

我试图为dll导出一个简单的测试函数,以便与指定调用约定为的应用程序(仅供引用:mIRC)一起使用:int__stdcalltest_func(HWNDmWnd,HWNDaWnd,char*data,char*parms,BOOLshow,BOOLnopause)现在,要从应用程序中调用它,我会使用test_func,但我注意到由于名称修改,它并不像我想象的那么简单。通过此处的类似主题,我了解到将extern"C"与__declspec(dllexport)结合使用是一种等效的(某种程度上)消除重整的方法到模块定义(.def)。但是,当使用extern/dllexport方法时,我的函

c++ - 使用 extern c 和 dllexport 与模块定义 (msvc++) 进行标准调用名称修改

我试图为dll导出一个简单的测试函数,以便与指定调用约定为的应用程序(仅供引用:mIRC)一起使用:int__stdcalltest_func(HWNDmWnd,HWNDaWnd,char*data,char*parms,BOOLshow,BOOLnopause)现在,要从应用程序中调用它,我会使用test_func,但我注意到由于名称修改,它并不像我想象的那么简单。通过此处的类似主题,我了解到将extern"C"与__declspec(dllexport)结合使用是一种等效的(某种程度上)消除重整的方法到模块定义(.def)。但是,当使用extern/dllexport方法时,我的函

c++ - 可以将变量重新声明为推断为相同类型的 auto 吗?

这个问题在这里已经有了答案:Doesadeclarationusing"auto"matchanexterndeclarationthatusesaconcretetypespecifier?(3个回答)关闭6年前。标准是否允许以下​​内容?#includeexterninta;autoa=3;intmain(int,char**){std::coutclang接受代码。g++提示声明冲突。 最佳答案 从标准上我不太清楚,但是,有这样写的section7.1.6.4autospecifierAprogramthatusesautoi

c++ - 可以将变量重新声明为推断为相同类型的 auto 吗?

这个问题在这里已经有了答案:Doesadeclarationusing"auto"matchanexterndeclarationthatusesaconcretetypespecifier?(3个回答)关闭6年前。标准是否允许以下​​内容?#includeexterninta;autoa=3;intmain(int,char**){std::coutclang接受代码。g++提示声明冲突。 最佳答案 从标准上我不太清楚,但是,有这样写的section7.1.6.4autospecifierAprogramthatusesautoi

c++ - C++0x 是否支持 __stdcall 或 extern "C"capture-nothing lambdas?

昨天我在考虑是否可以使用C++0xlambda函数的便利性来为WindowsAPI函数编写回调。例如,如果我想使用lambda作为EnumChildProc怎么办?与EnumChildWindows?比如:EnumChildWindows(hTrayWnd,CALLBACK[](HWNDhWnd,LPARAMlParam){//...returnstatic_cast(TRUE);//continueenumerating},reinterpret_cast(&myData));另一个用途是为C例程编写extern"C"回调。例如:my_class*pRes=static_cast(b

c++ - C++0x 是否支持 __stdcall 或 extern "C"capture-nothing lambdas?

昨天我在考虑是否可以使用C++0xlambda函数的便利性来为WindowsAPI函数编写回调。例如,如果我想使用lambda作为EnumChildProc怎么办?与EnumChildWindows?比如:EnumChildWindows(hTrayWnd,CALLBACK[](HWNDhWnd,LPARAMlParam){//...returnstatic_cast(TRUE);//continueenumerating},reinterpret_cast(&myData));另一个用途是为C例程编写extern"C"回调。例如:my_class*pRes=static_cast(b

c++ - 如何防止 extern "C"函数过载?

我正在编写一个c++库,它公开了一些仅由C#代码使用的函数。但是,由于我不小心打错了参数,我发现只要不使用cpp文件中的(notmistypedversion)函数,即使没有任何警告,这段代码也可以成功编译和链接。structDummy{inta;doubleb;};extern"C"voidSetArray(Dummy*x,intcnt);voidSetArray(Dummyx,intcnt){//aTODOplaceholder.}如何让编译器针对这种情况抛出错误或警告?编译器选项-Wall已设置,但仍然没有警告。使用tdmgcc5.1.0。 最佳答案