因此,我正在为固件创作“快速又脏”的剖面厂 - 我只需要知道某些功能需要多长时间即可。仅仅打印每次时间的时间都会偏向结果,因为记录很昂贵 - 因此,我将一堆结果保存到一个阵列中并在一段时间后倾倒。

在一个汇编单元(一个源文件)中工作时,我只有一堆存储结果的静态数组。现在,我需要在几个文件中执行此操作。我可以“复制粘贴”代码,但这只是丑陋(伴随着我)。如果我将定时代码放在单独的汇编单元中,进行静态变量并在标题文件中提供访问器功能,则每次我想访问这些静态变量时,我都会在函数调用的开销。

是否可以直接访问编译单元的静态变量?

我一直试图封装数据,而不是使用全局变量,但是这种情况仅仅是由于速度关注而要求的。

我希望这是有道理的!谢谢!

编辑: 好吧,看来我要问的是不可能的 - 你们中的任何人是否看到替代方案,从本质上讲,我可以直接访问另一个汇编单元的数据?

edit2: 感谢您的答案Pablo和Jonathan。我最终接受了Pablo的,因为我没有明确的位置来获取静态数据的指针(根据Jonathan) 在我的情况下. 。再次感谢!

有帮助吗?

解决方案

不,无法访问 static 汇编单元的变量来自另一个。 static 关键字准确地阻止了这种情况。

如果您需要从另一个汇编单元访问一个全球,则可以这样做:

file1.c:

int var_from_file1 = 10;

file2.c:

extern int var_from_file1;
// you can access var_from_file1 here

如果您可以删除 static 从您的声明中的关键字,您应该没问题。我知道更改现有源代码并不总是一个选项(即处理现有的旧版编译代码)。

其他提示

要从另一个单元C2中获取C1汇编单元中的静态变量,C1中的某些功能必须使C2可用的变量指示,或者某些非静态变量必须包含指向静态变量的指针。

因此,您可以将“静态变量”包装到单个结构中,然后编写一个函数,该函数将指针返回到该结构。您可以调用该功能以访问静态变量。

类似的规则适用于静态功能;如果文件中的某些函数(或非静态变量)使指示器指向可用的功能,则可以从文件外部间接调用静态函数。

如果通过指针访问不直接计算,那么您就会被打击; static 隐藏,除了删除关键字外,您不能解开除外 static 从变量编译时的变量 - 也许是通过C预处理器。当心名称冲突。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top