标签: extern

如何使用extern在源文件之间共享变量?

我知道C中的全局变量有时会有extern关键字.什么是extern变量?宣言是什么样的?它的范围是什么?

这与跨源文件共享变量有关,但这是如何工作的?我在哪里用extern

c global-variables extern

942
推荐指数
13
解决办法
67万
查看次数

"FOUNDATION_EXPORT"vs"extern"

我想问一下有什么用背后的原因FOUNDATION_EXPORT,而不是extern目标C项目.

我已经检查了这个问题,使用FOUNDATION_EXPORT得到了高达340分(第一名),而extern只使用了74分(第二名).

谁有人解释原因?是否有任何实际的理由FOUNDATION_EXPORT代替使用extern

谢谢!

objective-c extern

137
推荐指数
1
解决办法
2万
查看次数

使用extern模板(C++ 11)

图1:功能模板

TemplHeader.h

template<typename T>
void f();
Run Code Online (Sandbox Code Playgroud)

TemplCpp.cpp

template<typename T>
void f(){
   //...
}    
//explicit instantation
template void f<T>();
Run Code Online (Sandbox Code Playgroud)

Main.cpp的

#include "TemplHeader.h"
extern template void f<T>(); //is this correct?
int main() {
    f<char>();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是正确的使用方法extern template,还是仅将此关键字用于类模板,如图2所示?

图2:类模板

TemplHeader.h

template<typename T>
class foo {
    T f();
};
Run Code Online (Sandbox Code Playgroud)

TemplCpp.cpp

template<typename T>
void foo<T>::f() {
    //...
}
//explicit instantation
template class foo<int>;
Run Code Online (Sandbox Code Playgroud)

Main.cpp的

#include "TemplHeader.h"
extern template class foo<int>();
int main() {
    foo<int> test;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道将所有这些放在一个头文件中是好的,但如果我们在多个文件中实例化具有相同参数的模板,那么我们会得到多个相同的定义,编译器会将它们全部删除(除了一个)以避免错误.我该怎么用 …

c++ templates extern c++11

107
推荐指数
4
解决办法
8万
查看次数

外部内联

我理解"内联"本身就是对编译器的建议,并且在它的结构中它可能会或可能不会内联函数,它也会产生可链接的目标代码.

我认为"静态内联"执行相同的操作(可能内联也可能不内联),但在内联时不会产生可链接的目标代码(因为没有其他模块可以链接到它).

"extern inline"在哪里适合图片?

假设我想用内联函数替换预处理器宏,并要求此函数被内联(例如,因为它使用__FILE__和__LINE__宏,这些宏应该为调用者而不是这个调用函数解析).也就是说,如果函数没有内联,我想看到编译器或链接器错误."extern inline"这样做吗?(我假设,如果没有,除了坚持使用宏之外,没有办法实现这种行为.)

C++和C之间是否存在差异?

不同编译器供应商和版本之间是否存在差异?

c c++ extern inline-functions

86
推荐指数
3
解决办法
4万
查看次数

Objective-C中的前向声明枚举

我在Objective-C程序中遇到enum可见性问题.我有两个头文件,一个定义了一个typedef enum.另一个文件需要使用typedef'd类型.

在直接C中,我只是#include其他头文件,但在Objective-C中,建议不要#import在头文件之间使用,而是@class根据需要使用前向声明.但是,我无法弄清楚如何转发声明枚举类型.

我不需要实际的枚举值,除了相应的.m实现文件,我可以安全地#import离开.那么如何才能typedef enum在标题中识别?

enums typedef objective-c extern

66
推荐指数
3
解决办法
3万
查看次数

外部如何在C#中工作?

每当我深入了解反射器时,我就会碰到extern没有光源的方法.我在http://msdn.microsoft.com/en-us/library/e59b22c5(v=vs.80).aspx上阅读了msdn文档.我从那篇文章得到的是extern必须注入带有修饰符的方法.我将其解释为意味着它的工作方式类似于抽象工厂模式.我也注意到我从未见过非静态的外部方法.静态声明是一个要求(我可以看到这有什么意义)?我还在猜这里,我不确定它是如何运作的.在我看来,编译器必须识别某些缓解处理的属性,但我不知道除了我MethodImplAttributeDllImportAttributeMSDN示例中遇到的属性之外的属性.有人如何利用该extern属性?它说,在许多情况下,这可以提高性能.另外,我将如何extern研究类似的方法来源Object.InternalGetEquals()

.net c# performance modifier extern

59
推荐指数
2
解决办法
4万
查看次数

混合extern和const

我可以将extern和const混合为extern const吗?如果是,const限定符是否仅在其声明的范围内强加它的统治,或者它是否应与它声明的转换单元的声明完全匹配?即extern const int i;即使实际的i不是const,反之亦然,我可以声明说吗?

c c++ scope const extern

56
推荐指数
3
解决办法
5万
查看次数

extern关键字是什么意思?

什么是extern关键字是什么意思?我已经在函数声明面前看过了

extern void DoFoo ...
Run Code Online (Sandbox Code Playgroud)

c objective-c extern

56
推荐指数
2
解决办法
4万
查看次数

使用"auto"的声明是否匹配使用具体类型说明符的extern声明?

考虑以下程序:

extern int x;
auto x = 42;
int main() { }
Run Code Online (Sandbox Code Playgroud)

Clang 3.5接受它(现场演示),GCC 4.9和VS2013不接受(前者的现场演示).谁是对的,C++标准中指定的正确行为在哪里?

c++ extern language-lawyer auto

56
推荐指数
1
解决办法
1816
查看次数

为什么外部链接到静态变量?

为什么extern int n在声明n时(在不同的文件中)不编译static int n,但在声明时有效int n?(这两个声明都在文件范围内.)

基本上,为什么int n文件范围与同一范围不static int n一样?它只与extern有关吗?如果是这样,我错过了什么?

c static extern

55
推荐指数
2
解决办法
7万
查看次数