问题标签 [extern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1974 浏览

c++ - 各种 const/static 变量的链接

我对以下变量的联系有一些疑问。通过 C++03 7.1.1/7 的示例和编译器(Comeau、Clang 和 GCC)的实验,我得出以下链接类型:

  1. 首先static,然后extern

    根据第 3.5 节,我很清楚:(a)意味着内部联系。并且(b)也暗示了内部链接,因为名称“a”被声明为静态(由(a))。

  2. 首先extern,然后static

    首先,(c)意味着外部联系。但是(d)意味着内部链接,因为名称“b”被(d)声明为静态。根据 7.1.1/7,这是无效的,因为隐含的链接不一致。

  3. 首先const,然后extern

    首先,(e) 暗示了内部链接,因为它是 const 的,既没有显式声明 extern,也没有先前暗示的外部链接。并且 (f) 应该暗示外部链接并且是一个错误,因为它显式声明了名称 extern,但编译器将其保留在内部!为什么这样? 那是我的问题。

  4. 首先extern,然后const

    现在,(g) 暗示了外部链接,因为我们明确声明了 extern。并且 (h) 也意味着外部链接,因为 (g) 显式声明了 extern。


我已经通过以下模板通过实验发现了 3 和 4 的链接(第二个参数需要具有外部链接)


总结:查尔斯·贝利的讨论结果非常有成果,并表明有两种可能的解释3.5/3,其中重要的要点是

具有命名空间范围 (3.3.5) 的名称如果是

  • 显式声明为 const 且既未显式声明 extern 也未先前声明具有外部链接的对象或引用;

如果我们看点(f),那么两种解释会得出不同的结论,如下图所示

  1. 第一个解释说明pi1是声明const的,但也是声明extern的。因此,该变量具有外部联系。

  2. 第二种解释将“已声明”的两次出现解释为指代相同的声明。这样,它意味着它是声明const的,而不是extern const声明的。我们注意到(e)是声明的const而不是声明的extern const,因此我们给出了pi1内部链接。

现在什么解释是正确的?我无法从该措辞中确定,但编译器似乎以第二种方式解释了这一点。特别是,如果我们采用第一种解释,那么最后引用的部分3.5/3将是多余的,因为不会有一个有效的场景,其中一个名称将被声明const并且之前声明了外部链接但没有显式的extern.

0 投票
9 回答
1399 浏览

c++ - C++中的全局变量

在具有许多类的 C++ 多线程应用程序中,我试图找出定义全局变量的方法

  1. C 风格,在任何一个源文件中将其定义为全局,在标题中将其定义为外部,该标题包含在访问此变量的类中。

  2. 编写一个 Singleton 类,其中包含这些全局变量并公开 set/get 方法以写入变量。

通过第二种方法,可以通过锁以集中方式控制多线程访问,而不是第一种方法。

有更多更好的方法吗?

0 投票
2 回答
80 浏览

c - 有没有办法按名称获取外部变量(或函数)

我想我最近读到了一个 C 标准库函数,它能够返回一个指向任何外部变量的指针,该变量的名称作为 const char * 传递给它。我认为它可以通过链接器符号工作,如果有帮助的话。

0 投票
1 回答
1124 浏览

c++ - 调试类、c++、链接器错误

我正在尝试为我正在处理的项目编写一个调试类,并且我不想传递一个调试对象,所以我试图这样做。但是,我不知道为什么我的编译器或链接器似乎跳过了我正在为它编写的实现。

如果我将 #include "Debug.cpp" 添加到 main.cpp,则此代码可以正常工作。编译器不知何故缺少 open、close 和 print 函数的实现,除非我将实现放在 .h 文件或 #include Debug.cpp 中。

你知道为什么它没有在 Debug.cpp 中看到实现吗?

我认为这并不重要,但目前 debug.h 和 debug.cpp 在一个项目中,而 main.cpp 在另一个项目中(但都在同一个解决方案中,Visual Studio 2008)。main.cpp 正在构建为可执行文件,而 debug.h 和 debug.cpp 正在编译为动态库 (dll)。

调试.h

代码:全选

调试.cpp

代码:全选

主文件

代码:全选

如果我取消注释主函数中的打印行,我会收到以下错误:

代码:全选

编辑:我原来讨论的链接:

http://elysianshadows.com/phpBB3/viewtopic.php?f=6&t=5328&start=999999

0 投票
2 回答
1522 浏览

iphone - how to declare a external integer variable so that i can access that in in view controller

i want to access variable in all views ,so how can i declare it ....

0 投票
3 回答
4557 浏览

c++ - C++ 外部/多重定义

我正在尝试使用 externs 在 C++ 中与 Ada 交互。这两种实现有什么区别?

实施 A

实施 B

两种实现都编译得很好。但是 Impl-A 无法链接,我得到indexvalue的多重定义错误。我只是想了解这些差异。

0 投票
4 回答
21960 浏览

c++ - 使用外部时未定义的引用

我有以下设置(希望这不是一个太简单的例子):

A.cpp

溴化氢

B.cpp

现在,当我使用 inst inB.cpp我得到undefined reference to inst.

关于如何解决这个问题的任何想法?

0 投票
3 回答
5062 浏览

c++ - C++ 从 .CPP 文件访问变量

我对 .cpp 文件之间的变量访问如何工作有点模糊。例如:

主文件

main2.cpp

这会在 main.cpp 上生成一个编译器错误,告诉我 i 中不存在。那么,“静态”关键字在这种情况下有什么区别呢?(我试过用谷歌搜索,但大多数“静态关键字”信息页面都在谈论类和函数)

main2.cpp

是一样的吗?它是否防止extern int i被用于访问i其他地方?匿名命名空间的使用在处理变量方面有何不同?

main2.cpp


总结一下:

  • .cpp 文件之间可以访问变量吗?(除了 extern 关键字)
  • 全局变量上的 static 关键字如何影响事物?
  • 匿名命名空间如何以不同的方式影响事物?
0 投票
1 回答
906 浏览

c++ - 在 C++ 的`extern "C"` 块中使用 c99

我想要一个用 C 编写的函数,但可以从 C++ 调用,它需要一个受限指针。这仅在 c99 中可用,因此 g++ 不喜欢它,即使在extern "C"块中也是如此。我怎样才能绕过这个限制?

0 投票
2 回答
578 浏览

c++ - extern "C" (C 链接) 默认情况下

问题

GCC、MSVC 或 Clang 或某些组合是否支持将链接设置为默认为 C?

背景

我有一个大型混合 C/C++ 项目,虽然使用 C 链接导出 C++ 源中的符号很容易且合乎逻辑,但这些相同的源假设项目其余部分中的东西在 C++ 链接下。

目前的情况要求我明确地包装 C 源代码中定义的 C 源代码使用的任何内容,以及 C++ 源代码使用的 C 源代码中的所有内容extern "C++"

最重要的是,我不能放置extern "C"整个源文件或头文件,因为实际的 C++ 内容会抱怨。(例如#include <memory>我定义的 from 或 templates。)