什么是"extern linkage and with C language linkage"
What is "extern linkage and with C language linkage"
作者在下一段中所说的"外部链接"和"C语言链接"是什么意思,摘自[1]。
"外部C
声明有两种不同形式:上面使用的外部C
和外部C
{ ... }与大括号之间的声明。第一种(内联)形式是具有外部链接和 C 语言链接的声明;第二种只影响语言联系。因此,以下两个声明是等效的:"
你能进一步详细说明他试图用这个例子来解释什么吗?
[1] http://tldp.org/HOWTO/C++-dlopen/thesolution.html
作者所说的与这两行有关:
extern "C" int foo;
extern "C" { int bar; }
foo
是已声明但未定义的变量。它存在于其他地方。另一方面,bar
既是声明的,也是定义的。
把声明想象成只是声明某物存在于某处,但实际上并没有创建它。因此,定义是声明加上使那个东西存在。
后者与int bar;
完全相同,但将使用 C 链接"发布"变量。例如,一个函数int max (int a, int b);
可以在 C 语言链接中发布为_max
,在C++语言链接中发布_max$$int$int
(以允许多个具有相同名称的函数)。
请注意,此上下文中的"发布"是函数在链接器中的外观,以便代码可以链接到它。如果没有 C 语言链接,通常很难将 C 代码与C++库链接起来。
笨拙的措辞,是的。 他想说的是,
extern "C" int foo();
与
extern "C" { extern int foo(); }
但与
extern "C" { int foo(); }
。除了"extern int foo();
"和"int foo();
"在C++的文件范围内没有实际区别,所以你挠头是完全可以原谅的。 以下是它实际上有所作为的情况:
extern "C" const int x = 12;
extern "C" { const int y = 12; }
x
将在翻译单元之外可见,y
不会。
相关文章:
- 如何定义C结构:C-linkage和udt
- "assembly language" "mov"意味着复制还是移动?
- Visual Studio 2019 中的"C linkage function cannot return C++ class"
- "The C++ Programming Language"中所述的私有继承用法
- 将Windows SYSTEMTIME转换为字符串或字符buf,C++与用户的"Region and Language"格式?
- 为什么 Stroustrup 在 "The C++ Programming Language 3rd Edition (online)" 中定义了函数 sqrt?
- 如[dcl.typedef]/9所述,仅针对"linkage purposes"的链接声明的目的是什么?
- 如何修复-wsubobject -linkage警告
- "core language"是什么意思?
- 在 Xcode 4.5 中,"C++ Standard Library"和"C++ Language Dialect"的"Compiler Default"是什么?
- 在Windows下编译程序会给出一堆"error: template with C linkage"报告
- "The C++ Programming Language 4ed." [Stroustrup 2013] 具体类:"if the representation changes significan
- echo (shell) and C language
- 在C++中实施事件和定期驱动的"script language"?
- 什么是"extern linkage and with C language linkage"
- std::thread in C++ vs. goroutine in go language?
- 概念检查器不会在 GCC 上编译,因为它'has no linkage'
- Xcode的GDB在设备上安装时显示"Warning: the current language does not match this frame"
- Stroustrup的The C++ Programming Language中的错误?
- "internal linkage"是什么意思?