草庐IT

CF_EXTERN_C_BEGIN

全部标签

c++ - `extern "C"`是函数类型的一部分吗?

除了链接相关的东西,我在标准中没有看到任何评论。虽然标准没有说明调用约定,但在现实世界中,C和C++之间的调用约定可能有所不同,所以我预计C函数和C++函数的类型是不同的。但似乎不是,尤其是在GCC中。#includeextern"C"{intc_func(int);}intcpp_func(int);static_assert(!std::is_same::value,"Itshouldnotbethesametype");static_assert失败,因为GCC认为这些函数具有相同的类型。extern"C"是函数类型的一部分吗?如何检查函数是使用C调用约定还是C++调用约定?

c++ - 使用 extern "C"时,带大括号或不带大括号有区别吗?

所以,虽然是schooledbyJamesKanzeandLokiAstariaboutClinkage,我想知道这个:extern"C"intfoo1(void(*)());extern"C"{intfoo2(void(*)());}毕业后,我想一定是foo1只接受一个带有C++链接的函数指针,而foo2只接受一个带有C链接的函数指针。我的理解正确吗?C++标准中是否有具体的引用资料可以解释我上面示例中的差异?编辑:为了让每个人都能更轻松地跟进here'sapastebinwiththerelevantpartfromtheC++11draftstandard.

c++ - 当列表为空时 std::list:begin() 的行为

以下是否根据C++标准给出了定义的结果?std::listmyList;std::list::iteratormyIter=myList.begin();//anyissues?myList.push_back(123);myIter++;//willmyIterpointtothe123Ipushed?我可以在我正在使用的编译器上对此进行测试……但我想要一个更明确的答案。 最佳答案 所有标准迭代器和容器类型在这方面的行为都是相同的:§23.2.1[container.requirements.general]p6begin()re

c++ - 带有 C++ 的 extern C 是否避免了在 C 中合法但在 C++ 中不合法的未定义行为?

如果您将externC与C++文件一起使用,是否允许在C++中未定义的已定义C行为?废话.hextern"C"{structx{intblah;charbuf[];};char*get_buf(structx*base);structx*make_struct(intblah,intsize);}some_random.cpp#include"blah.h"...x*data=make_struct(7,12);std::strcpy(get_buf(data),"hello");是在C的灵活数组成员中使用定义的行为,这样使用时定义的行为? 最佳答案

c++ - C/C++ 稀有关键字 - register、volatile、extern、explicit

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。为了帮助澄清这个问题以便可以重新打开它,visitthehelpcenter.关闭11年前。您能否简要介绍一下这4个关键字的用途和原因?我了解google会告诉您的关于register和volatile的基本知识,但想了解更多(只是一个实用的概述)。外部和显式让我有点困惑,因为尽管做了相当低级的嵌入式系统代码,但我从来没有找到自己必须使用它们的理由。再说一次,我可以用谷歌搜索,但我更喜欢专家提供的快速实用的总结,以便牢记在心。 最佳答案

c++ - extern C 和 C++ 用于单个函数(bsearch/qsort)的目的是什么?

这个问题在这里已经有了答案:Isthespecificationof`bsearch`inC++11&C++14defective?(1个回答)关闭5年前。在浏览标准草案(N4527)时,我发现了以下段落([alg.c.library]):Thefunctionsignature:bsearch(constvoid*,constvoid*,size_t,size_t,int(*)(constvoid*,constvoid*));isreplacedbythetwodeclarations:extern"C"void*bsearch(constvoid*key,constvoid*bas

c++ - 为什么 extern “C” 在这里分组 C++ 类(不是标题)?

我在搜索SVM库时遇到了BudgetedSVM.在源码中,我发现了一个不寻常的用法,就像这样:#sample.h#ifndefSAMPLE_H#defineSAMPLE_H//noheaderincludedornamespacedeclaredhere#ifdef__cplusplusextern"C"{#endif//noheaderincludedornamespacedeclaredtooclassSample:publicParent{public:Sample();~Sample();type0fun(type1val1,type2val2);...};#ifdef__cp

C++ : Extern C Functions inside a Namespace

我必须链接两个库,比如A和B。其中一些文件在两个库中是通用的。所以,我在命名空间内的库A中声明函数,比如abc。因此,在A和B中,函数func如下所示:[inA]namespaceabc{extern"C"voidfunc();}[inB]extern"C"voidfunc();在构建项目时,编译器会抛出链接错误,说明函数func的多个定义。是不是命名空间内的A中的函数func或者外部“C”函数是否存在问题。如果有,那么我该如何区分它们呢? 最佳答案 当您使用Extern"C"时,您将关闭名称修饰,因此您会丢失命名空间信息,因为C没

c++ - c++中extern的使用

我很难理解“外部”的工作原理。我搜索了谷歌,但似乎没有我正在尝试的特定示例如果我有一个引用one.h的文件main.cpp在其中我有一个名为LIST1的列表(这是一个100x100的双数组)所以我有双List1[100][100];请问如何在one.cpp中使用此列表?externdoubleLIST1[100][100]不工作:/main.cpp:#include"one.h"externdoubleLIST1[100][100];一个.cpp:voidone::useList(){for(j=0;j这就是我所拥有的。我得到的错误:1>main.obj:errorLNK2001:un

c++ - STL 算法中的 begin()、end() 烦恼

我喜欢STL算法,并且更喜欢使用算法而不是通常的循环。几乎所有的STL算法通常都被用作:std::algorithm_name(container.begin(),container.end(),.....)container.begin(),container.end()-是我的项目中最流行的词对之一。有人遇到同样的问题吗?请问各位大神是怎么解决这个问题的?你有什么建议来避免这种重复?我看到了几种解决方法,但它们都有不同的限制(宏用法,与通常的指针不兼容等)。 最佳答案 下一个C++标准C++0X(其中X代表,希望是9)将增加从迭