在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個字符(即變量名稱/函數名稱)。爲了避免污染非常有限的全局名稱空間,「靜態」關鍵字(函數之外)被髮明瞭*來隱藏對象。所以從外部訪問對象的任何方式都會違背靜態的意圖。 –