草庐IT

UIKIT_EXTERN

全部标签

c++ - 是否可以在 extern "C"函数中使用模板参数

我的要求是使用extern"c"函数从集合中获取一个项目。方法如下template>extern"C"__declspec(dllexport)_Ty*__cdeclGetItem(std::vector*itr,intindex){if(itr->size()at(index);}编译时出现如下错误errorC2988:unrecognizabletemplatedeclaration/definition这个extern方法的使用是使用c#中的pinvoke获取对象数据 最佳答案 不,那是不可能的。该标准禁止模板及其特化具有C链

c++ - 编译程序包含 extern "C"

我正在尝试使用makefile来编译其他人使用cygwin编写的程序。我收到很多错误消息,其中很多人提示error:templatewithClinkage.经过一番搜索后,问题似乎与extern"C"有关.此行包含在文件cygwin/usr/include/pthread.h中,该文件包含在#include中。在其中一个标题中。当我删除这一行时,大多数错误消息都消失了。但是还剩下一些,如下所示:/usr/include/pthread.h:67:5:error:previousdeclarationof‘intpthread_atfork(void(*)(),void(*)(),vo

c++ - 使用 extern const 将结构传递给模板。什么是外部?

我在问自己为什么下面的代码有效,以及说明符extern在实例化baz_instance时做了什么:structbaz{intvalue;};externconstbazbaz_instance={3};templateintfoo(){returnb.value;}intmain(){foo();return1;}为什么上面的代码首先编译,如果省略extern说明符,为什么它不再编译?extern说明符在此示例中的作用是什么? 最佳答案 这是从C++03到C++11的标准部分之一。在C++03中,[temp.arg.nontype]

c++ - C++中extern “C”与extern “C” {}的不同链接

Thisquestionalreadyhasanswershere:Isthereadifferencebetweenwithbracesorwithoutwhenusingextern“C”?(3个答案)2年前关闭。我意识到,乍一看,我的问题似乎很明显是与extern关键字相关的众多问题之一的重复,但是我找不到的任何答案来谈论extern“C”和extern“C”{}。相反,我发现有几个人指出这两个结构是等效的,因为我认为这是合理的。不幸的是,经验证据表明它们实际上与等效。这是一个例子:extern"C"{constintmy_var1=21;}extern"C"constintmy

c++ - extern const char* const SOME_CONSTANT 给我链接器错误

我想像这样在API中提供一个字符串常量:externconstchar*constSOME_CONSTANT;但是如果我在我的静态库源文件中将它定义为constchar*constSOME_CONSTANT="test";当链接到该库并使用SOME_CONSTANT时,我遇到链接器错误:Error1errorLNK2001:unresolvedexternalsymbol"charconst*constSOME_CONSTANT"(?SOME_CONSTANT@@3QBDB)从externconstchar*const声明和定义中删除指针常量(第二个const关键字)使其工作。如何使用

c++ - extern "C"、重载和函数指针可能存在歧义

正常的功能,可以写extern"C"intFrotz(int);//inaheaderintFrotz(intx){returnx;}然而,对于函数指针,这似乎在编译器之间实现不一致。extern"C"intKlutz(int(*)(int),int);intKlutz(int(*fptr)(int),intx){return(*fptr)(x);}在声明中,参数也是extern"C"。在定义中,大多数编译器似乎都匹配这些函数,并使Klutz成为extern"C"函数。然而,Sun和Cray编译器将这些函数解释为不同的,产生了重载的intKlutz(int(*fptr)(int),in

【05】STM32·HAL库开发-C语言基础知识 | stdint.h介绍 | 位操作 | 宏定义的使用 | 条件编译 | extern声明 | typdef使用 | 结构体、指针、代码规范介绍。

这里写目录标题1.stdint.h简介(了解)2.位操作(掌握)2.1给寄存器某个位赋值3.宏定义(掌握)3.1带参数的宏定义4.条件编译(掌握)5.extern声明(掌握)6.类型别名(typedef)(掌握)7.结构体(掌握)8.指针(掌握)9.代码规范(熟悉)10.总结(了解)1.stdint.h简介(了解)  stdint.h是从C99中引进的一个标准C库的文件,可以在MDK5的安装路径:D:\MDK5.34\ARM\ARMCC\include中找到。  stdint.h定义了很多类型别名,将有符号的char类型定义别名为int8_t等,使用此套别名有易于移植。  在MDK中需要配置才

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