jjzjj

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++ - 更好地理解 extern "C"函数

我只是想进一步了解externC函数。据我所知,externC函数始终是您尝试从已编译的应用程序调用的函数。可执行文件、静态或动态库。extern"C"{HRESULTCreateDevice();typedefHRESULT(*CREATEDEVICE)();HRESULTReleaseDevice();typedefHRESULT(*RELEASEDEVICE)();}所以我的问题是...我的理解对吗??它总是必须是C函数指针吗??'为什么必须为每个函数使用typedef??我假设当您使用GetProcAddress()时。您正在为特定应用程序HEAP而不是您从中调用它的应用程序分

c++ - C++ 中的名称重整

我正在浏览这篇文章-http://www.geeksforgeeks.org/extern-c-in-c/给出了两个例子-intprintf(constchar*format,...);intmain(){printf("GeeksforGeeks");return0;}它说这不会编译,因为编译器将无法找到“printf”函数的损坏版本。但是,下面给出了输出。extern"C"{intprintf(constchar*format,...);}intmain(){printf("GeeksforGeeks");return0;}这是因为extern"C"block防止名称被破坏。但是,

C++ 外部 : pointer vs. 引用

我有三个类:ConsoleInputStream、ConsoleOutputStream、ConsoleErrorStream。它们都是从Stream派生的。每个流都有虚函数read和write;如您所料,当用户尝试使用ConsoleInputStream的write成员函数时,它会抛出一个错误。当用户尝试使用ConsoleOutputStream的write函数时,也会发生同样的情况。现在是显示代码的时候了。//STREAM.HPPnamespacestreamlib{externConsoleInputStreamstdin_default;externConsoleOutputS

c++ - 为什么需要在初始化时指定外部/静态变量的类型?

我不明白在初始化时需要指定外部/静态变量的类型。例如:structTest{staticinti;};Test::i=2;//errorintTest::i=2;//ok难道编译器不知道我是int类型的吗?这只是编译器的特殊性,还是为什么需要类型int的规范? 最佳答案 Idonotunderstandtheneedtospecifythetypeofanextern/staticvariableatinitialization.因为语言设计者选择对变量声明和定义使用相同的语法。该语法包括类型名称。您是对的,在某些情况下,该类型名称

c++ - 静态类变量是否与外部变量相同,仅具有类范围?

在我看来,静态类变量与外部变量相同,因为您只在staticintx/externintx中声明它语句,并实际在别处定义它(通常在.cpp文件中)静态类变量//.hfileclassFoo{staticintx;};//.cppfileintMyClass::x=0;外部变量://.hfileexterninty;//.cppfileinty=1;在这两种情况下,变量都在某处声明一次,并在一个文件中定义,该文件不会在编译中多次包含(否则链接器错误) 最佳答案 是的,两者都有静态存储时长和外部链接;它们具有基本相同的运行时属性,只是(编

c++ - 如果没有头文件,.lib 文件是否无用?

我有一些.lib文件,但我无权访问.h头文件。这是否意味着.lib文件现在没用了?如果没有,我该如何再次使用它们?我尝试在我的程序中使用这一行,但它似乎没有被编译成最终的可执行文件(使用CFFExplorer验证)。#pragmacomment(lib,"SomeLibFile.lib")那么,链接.lib文件的唯一方法是通过使用其头文件吗?是否有任何工具可以恢复.lib文件的头文件? 最佳答案 这取决于.lib文件代码是如何编写的。如果它是一个capi,这就是extern关键字的用途。您可以找到某种可以向您显示函数导出的程序。然后

c++ - 位于函数中的外部变量?

根据维基百科:http://en.wikipedia.org/wiki/External_variableAnexternalvariablemayalsobedeclaredinsideafunction.在函数中声明外部变量的目的是什么?它也必须是静态的吗? 最佳答案 它允许将对全局的访问限制在某些范围内:intmain(){externintx;x=42;//OKAY}voidfoo(){x=42;//ERROR}intx; 关于c++-位于函数中的外部变量?,我们在StackOv

c++ - 模板外部(与外部模板相比)

我遇到过这样的代码:templateexternvoidf(Ta);在.h文件中,f()在cpp文件中定义了几个特定的​​T。我找不到关于此语法的任何解释。我已经看到在c++11中引入了extern模板,但它们似乎具有不同的语法...有人可以详细说明吗?谢谢 最佳答案 extern在这里是多余的。这意味着从此模板实例化的函数具有外部链接。这是普通的extern,您可以将其应用于普通函数定义以指示它具有外部链接。这也是多余的,因为默认情况下函数具有外部链接。所以和templatevoidf(Ta);您已经提到在.cpp文件中定义了几个

c++ - 使用 `extern template` 防止模板类的隐式实例化

考虑以下代码片段:templatestructX{};externtemplatestructX;intmain(){X{};}它编译并链接:liveexampleongodbolt.org.由于externtemplate声明,我希望它不会链接。我的理解是externtemplate的意思是:“请不要在这个TU中实例化这个特定的模板特化,它将由其他一些TU提供,你可以链接到它”.示例/描述。我在isocpp上看到过,cppreference似乎验证了我的心智模型。例如Fromhttps://en.cppreference.com/w/cpp/language/class_templa