这是在C中完成符号连接的方式。
#define conc(a,b) a ## b
例如:
[conc(hello,World)
将使符号为helloWorld
。
我需要知道的有点不同。假设存在一个包含一些整数的变量n
。现在,我需要通过将另一个符号与value of n
串联来创建一个符号。
例如:
n = 2
我需要定义一些function(...)
,以便function(symbol,n)
将给出symbol1
(不是symboln
),当n = 3
,function(symbol,n)
将给出symbol3
等...
如何定义类似的东西?
这是我真正想要实现的。首先,在AtmelStudio
中使用它来对atmega
微控制器进行编程。这里有4个USART
模块,因此还有单独的一组寄存器,这些寄存器仅通过模块的编号更改名称。
例如,四个模块中的四个波特率寄存器为UBRR0L
,UBRR1L
,UBRR2L
,UBRR3L
。 (还有更多,请参见下文)。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS90ZGs1QS5wbmcifQ==” alt =“在此处输入图像描述”>
我需要编写一个函数来通过设置相关寄存器的值来初始化给定模块。由于寄存器名称仅因模块号而异,因此,如果我可以按照本文中的要求定义一些预处理程序指令,则可以编写一个函数,用一些符号表示寄存器名称,因此这些符号将带有相关的寄存器名称,并且一切都会好起来的。
例如:
如果我可以定义conc(a,b)
来完成我需要的功能,则为简单功能
void init(int no){ conc(UBRR,no) = 0xF0; }
将能够用来代表以下所有内容;
UBRR0 = 0xF0; UBRR1 = 0xF0; UBRR2 = 0xF0; UBRR3 = 0xF0;
如果无法实现,我唯一知道的就是重新编写四个单独的函数。但希望会有更好的选择。.
这是在C中完成符号连接的方式。#define conc(a,b)a ## b例如:conc(hello,World)将使符号helloWorld。我需要知道的是有些不同。假设有一个变量n ...
预处理器将在您的代码上,编译之前以及显然在运行时间之前运行。因此,没有任何预处理程序指令可以解决您的目的。
最接近的匹配将使用如下所示的切换用例:
您无法使用C预处理程序来完成此操作,因为变量的值是在运行时确定的。但是您可以使用snprintf()
在运行时根据数字构建字符串。
在我看来,寄存器(例如RXC0,RXC1,RXC2等)是等距的。如果这个假设是正确的,那么您可以计算以下寄存器的地址(只需用寄存器的类型替换rint
):
真正的窍门如下: