草庐IT

c++ - 为什么 "extern const int n;"不能按预期工作?

我的项目只包含两个源文件:a.cpp:constintn=8;b.cpp:externconstintn;intmain(){//errorLNK2001:unresolvedexternalsymbol"intconstn"(?n@@3HB)intm=n;}我知道有几种方法可以让它发挥作用;但是,我只是想知道为什么它不起作用? 最佳答案 这是因为const默认意味着内部链接,所以您的“定义”在翻译单元之外不可见它出现在哪里。在这种情况下,到目前为止,最好的解决方案是将声明(externintconstn;)在头文件中,并将其包含在

c++ - 如何声明 constexpr extern?

是否可以声明一个变量externconstexpr并在另一个文件中定义它?我试过了,编译器报错:Declarationofconstexprvariable'i'isnotadefinition在.h中:externconstexprinti;在.cpp中:constexprinti=10; 最佳答案 不,你不能这样做,这是标准所说的(第7.1.5节):1Theconstexprspecifiershallbeappliedonlytothedefinitionofavariableorvariabletemplate,thedec

c++ - extern "C"仅在函数声明中需要吗?

我编写了一个需要从C程序调用的C++函数。为了使它可以从C中调用,我在函数declaration上指定了extern"C"。然后我编译了C++代码,但编译器(DignusSystems/C++)生成了mangledname为功能。因此,它显然不尊重extern"C"。为了解决这个问题,我将extern"C"添加到函数definition中。在此之后,编译器生成了一个可从C调用的函数名。从技术上讲,extern"C"只需要在函数声明中指定。这是正确的吗?(C++FAQ有一个很好的例子。)你是否也应该在函数定义中指定它?这里有一个例子来证明这一点:/*----------*//*"foo.

c++ - 如何检测 C 代码(需要 'extern C' )是否在 C++ 中编译

我有一个C头文件作为C++库的一部分。这个C头文件只能由C编译器编译,或由extern"C"{...}block内的C++编译器编译,否则会发生Unresolved链接错误。我想添加一个block,例如:#ifdef__cplusplus#error"CompilingCbindingswithC++(forgot'extern\"C\"'?)"#endif在C头文件中,但不幸的是,__cplusplus宏也在extern"C"{...}block中定义。还有其他方法可以正确检测到这种情况吗? 最佳答案 通常的做法是不要求客户端代码

c++ - 为什么要使用 'extern "C+ +"' ?

在此article关键字extern后面可以跟“C”或“C++”。为什么要使用'extern"C++"'?实用吗? 最佳答案 语言允许:extern"C"{#include"foo.h"}如果foo.h包含需要C++链接的内容怎么办?voidf_plain(constchar*);extern"C++"voidf_fancy(conststd::string&);这就是让链接器满意的方式。 关于c++-为什么要使用'extern"C++"'?,我们在StackOverflow上找到一个类

objective-c - 在 Objective C 中使用 extern

在ObjectiveC中使用extern有多好?它确实使某些部分的编码变得容易......但它不会破坏面向对象吗? 最佳答案 您会发现extern在Cocoa框架中被广泛使用,并且很难找到一个令人信服的论点,即他们的OO被“宠坏了”。相反,Cocoa被很好地封装并且只暴露它必须的东西,通常是通过extern。全局定义的常量当然是最常见的用法,但不一定是唯一有效的用法。IMO,使用extern不一定会“破坏”面向对象。即使在OO中,也经常使用可从任何地方访问的变量。使用extern是解决Objective-C中缺少“类变量”(如Jav

c - extern 关键字是什么意思?

extern关键字是什么意思?我在像这样的函数声明之前已经看到了externvoidDoFoo... 最佳答案 extern给出了一个名称​​外部链接。这意味着对象或函数可以通过该名称从程序中的其他翻译单元访问。对于函数,这是任何情况下的默认链接,因此它的使用(在此上下文中)通常是多余的。 关于c-extern关键字是什么意思?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/27

c++ - 如何使用外部模板

我一直在浏览C++0x的N3291工作草案。我对外部模板很好奇。第14.7.3节指出:Exceptforinlinefunctionsandclasstemplatespecializations,explicitinstantiationdeclarationshavetheeffectofsuppressingtheimplicitinstantiationoftheentitytowhichtheyrefer.仅供引用:术语“显式实例化声明”是externtemplate的标准说法。.这是在第14.7.2节中定义的。这听起来像是在说如果你使用externtemplatestd::

c++ - 如何使用外部模板

我一直在浏览C++0x的N3291工作草案。我对外部模板很好奇。第14.7.3节指出:Exceptforinlinefunctionsandclasstemplatespecializations,explicitinstantiationdeclarationshavetheeffectofsuppressingtheimplicitinstantiationoftheentitytowhichtheyrefer.仅供引用:术语“显式实例化声明”是externtemplate的标准说法。.这是在第14.7.2节中定义的。这听起来像是在说如果你使用externtemplatestd::

c++ - 为什么我们在 C++ 中需要 extern "C"{ #include <foo.h> }?

我们为什么需要使用:extern"C"{#include}具体来说:我们应该什么时候使用它?需要我们使用它的编译器/链接器级别发生了什么?这在编译/链接方面如何解决需要我们使用它的问题? 最佳答案 C和C++表面上相似,但各自编译成一组非常不同的代码。当您在C++编译器中包含头文件时,编译器需要C++代码。但是,如果它是C头文件,则编译器期望头文件中包含的数据被编译成某种格式——C++'ABI'或“应用程序二进制接口(interface)”,因此链接器会阻塞。这比将C++数据传递给需要C数据的函数更可取。(要深入了解细节,C++的A