在C++中,我可以有一个吸气函数声明在头文件中的内联:内联setter和getter功能用C
class Cpp_Example
{
public:
unsigned int get_value(void)
{ return value;}
private:
unsigned int value;
};
通过包含该头文件,客户端的方法和功能可以使用吸气剂功能访问私有变量。
我期待这个概念在C语言建模:
hello.h:
#ifndef HELLO_H
#define HELLO_H
#include <stdio.h>
inline void Print_Hello(void)
{
extern const char hello_text[32];
puts(hello_text);
}
inline void Print_Value(void)
{
extern unsigned int value;
printf("Value is: %d\n", value);
}
#endif // HELLO_H
的hello.c:
const char hello_text[32] = "Hello World!\n";
static unsigned int value = 5U;
的main.c:
#include <stdio.h>
#include <stdlib.h>
#include "hello.h"
int main(void)
{
Print_Hello();
Print_Value();
// puts(hello_text);
return EXIT_SUCCESS;
}
我得到一个链接错误从GCC:
$ gcc -o main.exe main.c hello.c
/tmp/cc41ZB8H.o:main.c:(.rdata$.refptr.value[.refptr.value]+0x0): undefined reference to `value'
collect2: error: ld returned 1 exit status
有没有办法有一个内联函数(在头文件)的另一个翻译单位访问静态变量?
或者有没有一种方法来实现内联的getter函数?
我在嵌入式平台上使用IAR Embedded Workbench,ARM7TDMI处理器。
gcc编译器用于测试PC上的概念。
编辑1:背景
我正在寻找优化在临界区内的getter调用。目标是减少在关键部分花费的时间。
编辑2:没有全局变量
我们车间使用的编码指南没有全局变量。
另外,这个系统是运行MicroCOSII的RTOS。
@chux:去除静态破坏封装和数据隐藏。该变量成为任何人都可以访问的全局变量。 –
如果您保持静态,则无法从外部访问它。请记住C中没有名称空间,并且第一个C编译器的连接器在符号中不支持超过6个字符(即变量名称/函数名称)。为了避免污染非常有限的全局名称空间,“静态”关键字(函数之外)被发明了*来隐藏对象。所以从外部访问对象的任何方式都会违背静态的意图。 –