草庐IT

external-system

全部标签

c++ - 什么时候使用 extern "C"?

我知道如何使用extern"C"但必须在什么条件下使用它?extern"C"tellstheC++compilernottoperformanyname-manglingonthecodewithinthebraces.ThisallowsyoutocallCfunctionsfromwithinC++.例如:#includeintmain(){chars[]="Hello";chard[6];strcpy_s(d,s);}虽然这在VC++上编译得很好。但有时这会写成:extern"C"{#include}我不明白这一点。你能举一个需要extern"C"的真实例子吗?

c++ - 将 System::String 转换为 Const Char *

这个问题在这里已经有了答案:howtoconvertSystem::Stringtoconstchar*?(2个答案)关闭7年前。我正在使用VisualC++2008的GUI创建器制作用户界面。单击按钮时,将调用以下函数。内容应该创建一个文件,并以文本框“文本框”的内容命名该文件,末尾带有“.txt”。但是,这导致我出现转换错误。这是代码:私有(private):System::VoidButton_Click(System::Object^sender,System::EventArgs^e){ofstreammyfile(Textbox->Text+".txt");我的文件.clo

c++ - 函数 system() 如何在 C++ 中工作?

我正在尝试理解使用system("somecommand")在C++中进行的系统调用。这是代码#include#includeusingnamespacestd;intmain(){cout可执行文件“暂停”是从以下代码创建的#includeusingnamespacestd;intmain(){cout我得到以下输出enteranykeytocontinue1HelloWorld有人可以向我解释一下输出吗?我期待这个-Helloenteranykeytocontinue1World 最佳答案 system在shell中运行命令。但

c++ - Clrdump (C++) 错误 LNK2019 : unresolved external symbol __imp__RegisterFilter@8 referenced in function _main

我正在使用带有pvcs编译器的makefile系统(使用MicrosoftVisualC++,2008编译器),我收到了几个以下形式的链接错误:errorLNK2019:unresolvedexternalsymbol__imp__RegisterFilter@8referencedinfunction_main尽管使用了extern"C"声明,但还是会发生这种情况,即:extern"C"intCLRDUMP_APIRegisterFilter(LPCWSTRpDumpFileName,unsignedlongDumpType);此外,在makeexe.mak中,库链接如下:$(编译库

c++ - C++中extern "C"有什么作用?

将extern"C"放入C++代码中究竟有什么作用?例如:extern"C"{voidfoo();} 最佳答案 extern"C"使C++中的函数名称具有C链接(编译器不会破坏名称),以便客户端C代码可以使用C兼容header链接(使用)您的函数只包含函数声明的文件。您的函数定义包含在二进制格式中(由您的C++编译器编译),然后客户端C链接器将使用C名称链接到该二进制格式。由于C++具有函数名称的重载而C没有,C++编译器不能仅使用函数名称作为链接的唯一ID,因此它通过添加有关参数的信息来破坏名称。C编译器不需要破坏名称,因为您不能

c++ - 为什么他们坚持在下面的示例中使用 `extern` 说明符?

[basic.link]/6(我的重点):Thenameofafunctiondeclaredinblockscopeandthenameofavariabledeclaredbyablockscopeexterndeclarationhavelinkage....staticvoidf();staticinti=0;voidg(){externvoidf();//internallinkageinti;//#2ihasnolinkage{externvoidf();//internallinkage[basic.link]/7:...namespaceX{voidp(){q();//

c++ - 为什么 std::chrono::system_clock::to_time_t() 不是 constexpr?

C++标准(github.com/cplusplus/draft)有time_t转换函数(std::chrono::system_clock::to_time_t和std::chrono::system_clock::from_time_t)用于列为static和noexcept但不是constexpr。鉴于time_point和duration上的所有操作基本上都是constexpr(包括duration_cast和time_point_cast),我想不出任何理由来排除它们。在我的本地机器上快速检查libstdc++源代码确认这些函数是作为简单的持续时间/时间点转换实现的。这两个函

c++ - 仅在 header 中的extern变量意外起作用,为什么?

我当前正在更新Arduino的C++库(使用avr-gcc编译的8位AVR处理器)。通常,默认Arduino库的作者喜欢在header中包含该类的extern变量,该变量也在.cpp类文件中定义。我认为基本上是为了让新手能够将所有东西都准备好作为内置对象。我遇到的情况是:我更新的库不再需要.cpp文件,并且已将其从库中删除。直到我进行最后一遍检查发现的错误之后,尽管没有为.cpp文件中的extern变量提供定义的事实,但没有产生链接器错误。这很简单,我可以得到它(头文件):structFoo{voidmethod(){}};externFoofoo;包含此代码并将其用于一个或多个源文件

c++ - 扭曲的逻辑 : a global variable in one file refers to an extern variable but is also referred by that extern variable

文件A.cpp:#includeexternintiA;externintiB=iA;intmain(){std::cout文件B.cppexternintiB;externintiA=2*iB;编译链接运行,out进来debug和release模式是0,0我的问题是它是如何工作的,为什么在链接阶段没有问题?我正在使用VC++2003。 最佳答案 初始化程序覆盖了extern关键字,因此这没有什么“神奇”:您只是在不同的翻译单元中声明和定义两个完全不相关的变量。来自StandardforProgrammingLanguageC++-

C++11(或 Boost)system_error 策略

我正在开发一个系统,该系统旨在使用名为error_code、error_condition和error_category的类——一个新的方案std:在C++11中,尽管目前我实际上正在使用Boost实现。我读过ChrisKholkoff的seriesofarticles,现在三遍了,我想我了解了如何创建这些类。我的问题是这个系统需要处理存在于单个DLL中的插件,而插件可能会出错。我最初的设计是计划一个特定于系统的错误类别,该类别将包含所有各种错误代码和未真正映射到errno值的特定错误条件的候选列表。这里的问题是,要使DLL能够使用这些错误代码之一,它需要访问应用程序中error_ca