草庐IT

HK_EXTERN

全部标签

c++ - 使用 extern "C"链接的过载解决方案

在混合的C/C++项目中,我们需要从C调用C++函数。要调用的函数被重载为三个独立的函数,但我们可以从C端忽略它,我们只选择最合适的并坚持使用那个。有两种方法可以做到这一点:(1)编写一个带有extern"C"函数的小型C++包装器,将调用转发给选定的重载函数,或者(2)仅声明我们想要的一个函数的hackish方法以extern"C"的形式从C调用。问题是,选择第二种变体是否有任何缺点(除了噩梦和恶业)?换句话说,给定三个重载函数,其中一个被声明为exern"C",我们是否应该预料到C++方面的问题,或者这是否根据标准明确定义? 最佳答案

c++ - 我是否需要一个 extern "C" block 来包含标准 POSIX C header ?

我是否需要extern"C"{}block来在C++程序中包含标准Cheader。只考虑在C++中没有对应物的标准C头文件。例如:extern"C"{#include#include} 最佳答案 系统C头文件通常已经包含一个extern"C"block,由#ifdef__cplusplus保护。这样,函数在编译为C++时会自动声明为extern"C",您无需手动执行此操作。例如在我的系统上unistd.h和fcntl.h以__BEGIN_DECLS开始并以__END_DECLS结束,它们是在sys/cdefs.h中定义的宏:/*C+

c++ - 声明一个数组,其大小声明为 extern const

我在初始化一个大小定义为externconst的数组时遇到问题。我一直遵循这样的规则,即全局变量应该在头文件中声明为extern,并且它们的相应定义应该在一个实现文件中,以避免变量重新声明错误。这种方法工作得很好,直到我不得不初始化一个大小被定义为外部常量的数组。我收到一个错误,指出需要一个常量表达式。但是,如果我尝试为const变量赋值,编译器会正确地提示无法将值赋给常量变量。这实际上证明编译器确实将变量视为常量。那为什么声明一个同样大小的数组会报错呢?不使用#define有什么方法可以避免这种情况吗?我也想知道这个错误的原因。包.h:#ifndefPACKAGE_H#defineP

windows - 对比 2010 : error LNK2028: unresolved token (0A000342) "extern "C"int __stdcall

以下代码摘自here.我在Windows7上工作时删除了所有WindowsNT部分。我复制了这段代码并在visualstudio2010中运行(新建项目->VC++->CLR->CLR控制台...)。但它给出了许多Unresolvedextern'c'错误,如代码下方所列。我犯了什么错?#defineSTRICT1#include#includeusingnamespacestd;BOOLCALLBACKEnumWindowsProc(HWNDhWnd,LPARAMlParam){DWORDdwThreadId,dwProcessId;HINSTANCEhInstance;charSt

ios - 为什么 Apple 使用特殊的 COREDATA_EXTERN 限定符而不只是 extern?

有时我喜欢浏览Apple源代码,看看专业人士是如何做的,有时也能学到一两件事。我现在正在查看NSManagedObjectContext.h的头文件,以及它们的全局变量,比如NSManagedObjectContextDidSaveNotification,它们是这样声明的:COREDATA_EXTERNNSString*constNSManagedObjectContextDidSaveNotification;而通常它只是:externNSString*constNSManagedObjectContextDidSaveNotificationCmd+clickingonCORED

c++全局变量extern

externextern是C++中的一个关键字,用于声明一个变量或函数是在其他文件中定义的。它的作用是告诉编译器在链接时在其他文件中寻找该变量或函数的定义。在C++中,如果一个变量或函数在多个文件中使用,那么就需要在每个文件中都声明一次该变量或函数。这时就可以使用extern关键字来声明该变量或函数是在其他文件中定义的。除了在不同文件中共享变量和函数的定义、在函数中使用全局变量、在头文件中声明变量和函数、在类中声明静态成员变量外,extern还有一些其他的用法:在模板中使用外部变量在命名空间中使用外部变量在静态库中使用外部变量声明变量例如,假设我们有两个文件a.cpp和b.cpp,它们都需要使

ios - static const 与 extern const 有何不同?

在我的iOS/ObjectiveC项目中,我经常有一个包含我的APIkey等的constants.h文件。直到今天,我一直将常量声明为staticconst,如下所示:staticNSString*constkAPIKey=@"wembvkejrvb43789gvbiu2bvfake";这很好用,但不幸的是我只能为基元和NSString文字创建常量,本质上。其他对象,例如UIColor对象,不能存储在此常量中因为它们不能用静态文字语法初始化(我的理解,需要引用)。在阅读了一些C++文档之后,我明白了一些事情:static是不必要的,因为const是隐式静态的。调用NSString*co

C++ extern的用法详细解析

C++编程中,extern是一个非常重要的关键字,它的用途主要是用来声明一个全局变量或者函数。本文将详细解析extern的用法,并通过实例进行详细的解释。1.extern的基本定义在C++中,extern是一个存储类修饰符,它告诉编译器,其声明的变量或者函数是在别的文件中,提示编译器在链接阶段从其他文件中寻找此变量或函数的定义。externintx;//'x'的定义在其他文件中这里需要注意,extern只是声明,不是定义。也就是说,它只是告诉编译器变量或函数的类型,而不会分配内存。2.extern的主要用途(1)用于链接外部变量当我们在多个文件中使用同一个变量时,extern可以帮助我们实现这

iOS static、extern、const

全局变量在函数外声明的变量,可以在声明时附上初始值,存储在全局区,生命周期为整个程序运行期间。#import"SEObject.h"//定义在.h文件中时该类被其他文件引入时报重复定义的错误(1duplicatesymbolforarchitecturex86_64)NSString*SEString=@"SEString";@implementationSEObject@end#import"SEView.h"//#import"SEObject.h"//NSString*SEString;@implementationSEView@end源程序中不能存在相同的对象名,否则编译器报错(1du

C/C++中 extern用法

一、定义和声明的区别声明用来告诉编译器变量的名称和类型,而不分配内存,不赋初值。定义为了给变量分配内存,可以为变量赋初值。注:定义要为变量分配内存空间;而声明不需要为变量分配内存空间。二、extern用法2.1extern函数为什么要用extern函数呢?直接#include相应的头文件不可以嘛?例子,如a.cpp想调用b.cpp中的delayms函数,有两种方法:方法1:include头文件,即直接#delay.h方法2:extern方法,externvoiddelayms()这句在调用文件中使用,表示引用全局函数delayms()。优点:a.cpp不采用方法一,就不会包含inlcudede