extern相关内容

C-Externs-监控LD_PRELOAD库中的值的安全方法

背景 我帮助维护了一个简单的命令行工具diskmanager,用于监视糟糕的磁盘性能,这主要是由于同时使用同一磁盘的操作/用户太多所致。我的工作涉及维护一个库,libdisksupervisor.so,它偶尔用于通过以下方式启动磁盘管理器程序来监督它: LD_PRELOAD=/public/libdisksupervisor.so /sbin/diskmanager 我们这样做的原 ..
发布时间:2022-08-23 10:58:08 其他开发

外部内联做什么?

我理解 inline 本身就是对编译器的建议,它可以自行决定是否内联函数,它也会生成可链接的目标代码. 我认为 static inline 的作用相同(可能内联也可能不内联),但在内联时不会产生可链接的目标代码(因为没有其他模块可以链接到它). extern inline在哪里适合? 假设我想用内联函数替换预处理器宏并要求内联该函数(例如,因为它使用应该解析的 __FILE__ ..
发布时间:2022-01-30 16:53:06 C/C++开发

C 是否提供了一种将外部变量声明为“只读"但将其定义为可写的方法?

我正在使用 GCC C 为嵌入式产品开发硬件抽象库.在库中,有一个变量对于链接库的应用程序应该是只读的,但可以从编译单元中修改定义它. 是否有一种标准的、可接受的方式来声明整数(在库头文件中),这将允许应用程序读取变量中的值,但如果尝试生成代码,则告诉编译器生成错误那写回它?例如,如果我将一个 function 声明为: extern void foo(int const bar); . ..
发布时间:2022-01-25 12:37:28 其他开发

为什么“extern const int n;"?没有按预期工作?

我的项目只包含两个源文件: a.cpp: const int n = 8; b.cpp: extern const int n;主函数(){//错误 LNK2001: 无法解析的外部符号 "int const n" (?n@@3HB)诠释米= n;} 我知道有几种方法可以让它发挥作用;但是,我只是想知道为什么它不起作用? 解决方案 因为const默认隐含内部链接,所以您的“定 ..
发布时间:2022-01-23 23:11:48 C/C++开发

在 C 中创建 extern char 数组

如何在 C 中创建一个外部字符数组? 我尝试了各种方法来定义 char cmdval[128] 但它总是说 undefined reference to 'cmdval' 我想在 first.c 文件中的 cmdval 中放入一个字符串,并在其他 second.c 文件中使用它.我尝试使用 extern char cmdval[128] 添加一个 global.h 文件,但没有成功. ..
发布时间:2022-01-12 20:22:56 其他开发

将变量放入标头与将变量放入源之间的区别

假设我声明了一个带有变量的头文件: int 计数; 然后在源文件中,我要使用count.我是否必须将其声明为: 外部整数计数 或者我可以在我的源文件中使用它吗?假设我有 #include "someheader.h".还是我应该在源文件中声明它?把count放在头文件和源文件有什么区别?还是没关系? 解决方案 你只需要一个 count 变量,对吧?那么这一行: int 计数; ..
发布时间:2022-01-11 16:39:21 其他开发

当 extern 声明和定义之间的类型不匹配时,会有什么行为?

假设我有两个文件: ==文件1== extern char* foo; ==文件2== double foo; 尽管类型不匹配,这两个文件似乎与 g++ 和 clang++ 都可以很好地编译和链接.据我了解,推荐的做法是将 extern 声明放在两个文件都包含的标头中,因此 File2 将引发重新定义错误. 我的问题是: 根据 c++ 标准,这是否会导致未定义的行为?如果 ..
发布时间:2022-01-11 15:44:00 C/C++开发

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

我想在 API 中提供一个字符串常量,如下所示: extern const char* const SOME_CONSTANT; 但如果我在我的静态库源文件中将其定义为 const char* const SOME_CONSTANT = "test"; 我在链接到该库并使用 SOME_CONSTANT 时遇到链接器错误: 错误 1 ​​错误 LNK2001:无法解析的外部符号“cha ..
发布时间:2022-01-11 15:39:02 C/C++开发

函数上的 C++ extern 关键字.为什么不只包含头文件?

如果我理解正确,这意味着 extern void foo(); 函数 foo 是在另一个翻译单元中声明的. 1) 为什么不直接#include 声明该函数的标头? 2) 链接器如何知道在链接时到哪里寻找函数? 编辑:也许我应该澄清一下,上面的声明之后是使用函数 foo(); 在这个翻译单元中从未定义过. 解决方案 1) 可能没有头文件.但是是的,一般来说,对于大型 ..
发布时间:2022-01-11 15:27:24 C/C++开发

在头文件中声明和定义且仅在其 cpp 文件中使用的变量的多重定义错误

我正在将编写为一个芯片编译的代码转移到另一个芯片上. 出现的一个问题是多个定义错误.其中一些似乎是由于第一个芯片的链接器让我在跨多个源文件使用变量时懒得声明变量 extern.我以前根本没有使用 extern(在 something.h 中声明和定义一个变量,在 something.cpp 和包含 something.h 的其他源文件中使用它)并且它编译和链接得很好. 我相信我已经很好 ..
发布时间:2022-01-11 15:24:59 C/C++开发

Objective-C 静态、外部、公共变量

我想要一个变量,我可以通过导入头文件在任何地方访问它,但我也希望它是静态的,因为只创建了其中一个.在我的 .m 文件中,我指定 static BOOL LogStuff = NO; 在 initialize 方法中我设置了日志记录值: + (void)initialize{LogStuff = ...//随便} 但是我希望能够通过导入 .h 文件在任何地方访问我的变量,所以我想做这样的事情 ..
发布时间:2022-01-05 20:33:32 移动开发

静态常量与外部常量

我一直在头文件中使用静态常量,如下所示: static NSString * const myString = @"foo"; 但是已经读过这不是这样做的“安全"或正确的方法.显然,如果我希望从另一个类访问我的 const 字符串,我应该在我的 .h 中将字符串声明为: extern NSString * const myString; 然后在我的 .m 文件中: NSString * ..
发布时间:2022-01-05 20:23:57 移动开发

默认情况下全局变量是 extern 还是等同于在 global 中使用 extern 声明变量?

我经历了以下两个问题: C 和 C++ 中的静态和外部全局变量 C 中的全局变量是否是静态的? 两个问题都以不同的方式说明了这两件事. 问题 1 的答案: 全局变量在 C 和 C++ 上默认不是 extern 或 static. 问题 2 的答案: 如果不指定存储类(即extern或static关键字),则默认全局变量有外部链接 我需要知道以下几点: ..
发布时间:2022-01-05 20:16:58 C/C++开发

为什么不外部链接到静态变量?

为什么在声明 n 时 extern int n 不编译(在不同的文件中)static int n,但在声明 int n 时有效>?(这两个声明都在文件范围内.) 基本上,为什么文件范围内的 int n 与同一范围内的 static int n 不一样?它仅与外部有关吗?如果是这样,我缺少 extern 怎么办? 解决方案 static 的全部和全部目的是声明一个变量对于声明它的源文件 ..
发布时间:2022-01-05 20:08:04 其他开发

静态内联、外部内联和普通内联函数有什么区别?

static inline、extern inline 和普通的 inline 函数有什么区别? 我看到了一些关于此的模糊解释.据我所知,static inline 不仅仅是一个 inline 函数,它只能在某个文件中被称为 staticcode> 关键字通常表示.extern inline 也是如此,我猜,这与 extern 变量的解释不同.任何答案将不胜感激! 解决方案 带有 s ..
发布时间:2022-01-05 20:06:56 其他开发

C 中的全局变量是静态的还是非静态的?

默认情况下,C 中的全局变量是 static 还是 extern? 如果全局变量默认为 static,那么这意味着我们可以在单个文件中访问它们,但我们也可以在不同的文件中使用全局变量. 这是否意味着它们默认具有 extern 存储空间? 解决方案 如果不指定存储类(即 extern 或 static 关键字),然后默认全局变量具有外部链接.来自 C99 标准: §6.2.2 标识 ..
发布时间:2022-01-05 20:06:33 其他开发

extern C 不能在类级别使用?

只是想确认在Windows环境下,VSTS 2008 + C++项目中,我们只能将extern C应用到函数级别,不能应用到类级别(所以类中的所有成员函数都使用C语言名称mangling)?试了好几种方法,总是编译错误. 提前致谢,乔治 解决方案 您可以通过一种非常复杂(但完全合法)的 hack 将 extern "C" 应用于成员函数: extern "C" typedef in ..
发布时间:2022-01-05 19:21:38 C/C++开发

如何将 out/ref extern 参数转换为 F#

我有一个像这样的 C# extern 声明: [DllImport("something.dll")]public static extern ReturnCode GetParent(IntPtr inRef, out IntPtr outParentRef); 如何将其翻译成 F#? 解决方案 您可以尝试类似下面的代码.我不知道 ReturnCode 是什么,所以下面的代码期望它 ..
发布时间:2022-01-05 09:45:40 其他开发