C++ では、ヘッダー ファイルでインラインで宣言された getter 関数を使用できます。
class Cpp_Example
{
public:
unsigned int get_value(void)
{ return value;}
private:
unsigned int value;
};
このヘッダー ファイルをインクルードすることにより、クライアント メソッドと関数は getter 関数を使用してプライベート変数にアクセスできます。
この概念を 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
こんにちは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
インライン関数 (ヘッダー ファイル内) が別の翻訳単位の静的変数にアクセスする方法はありますか?
または、インラインのゲッター関数を実装する方法はありますか?
組み込みプラットフォームで IAR Embedded Workbench、ARM7TDMI プロセッサを使用しています。
gcc コンパイラは、PC 上で概念をテストするために使用されます。
編集 1: 背景
クリティカル セクション内にある getter 呼び出しを最適化しようとしています。目的は、クリティカル セクションで費やされる時間を短縮することです。
編集 2: グローバルなし
当店が使用するコーディング ガイドラインには、グローバル変数はないと記載されています。
また、このシステムは MicroCOSII を実行する RTOS です。