これは、 Cでシンボル連結が行われる方法です。
#define conc(a,b) a ## b
例えば:
conc(hello,World)
シンボルを作成しますhelloWorld
。
私が知る必要があるのは少し違います。n
整数を保持する変数があるとします。ここで、別のシンボルを の値 n
と連結してシンボルを作成する必要があります。
例えば:
n = 2
私はいくつかfunction(...)
を
定義するfunction(symbol,n)
必要がsymbol1
ありsymboln
ます。n = 3
function(symbol,n)
symbol3
そのようなものをどのように定義できますか?
これが私が本当に達成したいことです。まず、これはマイクロコントローラAtmelStudio
をプログラムするために使用されます。atmega
そこには 4 つUSART
のモジュールがあるため、個別のレジスタ セットがあり、モジュールの番号だけで名前が変わります。
たとえば、4 つのモジュールの 4 つのボー レート レジスタはUBRR0L
、、、、UBRR1L
です。(さらにいくつかあります。以下を参照してください)。UBRR2L
UBRR3L
関連するレジスタの値を設定して、特定のモジュールを初期化する関数を作成する必要があります。レジスタ名はモジュール番号によってのみ異なるため、この投稿で質問されているようにプリプロセッサ ディレクティブを定義できれば、レジスタ名をシンボルで表す単一の関数を記述できるため、シンボルには関連するレジスタ名が付けられ、うまくいくだろう..
例えば:
必要なことを行うように定義できればconc(a,b)
、単純な関数
void init(int no){
conc(UBRR,no) = 0xF0;
}
以下のすべてを表すために使用できます。
UBRR0 = 0xF0;
UBRR1 = 0xF0;
UBRR2 = 0xF0;
UBRR3 = 0xF0;
これが達成できない場合、私が知っている唯一のことは、4 つの別個の関数を書き直すことです。しかし、より良い代替手段があることを願っています..