相关疑难解决方法(0)

使用##和__LINE__创建C宏(使用定位宏进行标记连接)

我想创建一个C宏,它创建一个名称基于行号的函数.我以为我可以做类似的事情(真正的函数会在括号内有声明):

#define UNIQUE static void Unique_##__LINE__(void) {}
Run Code Online (Sandbox Code Playgroud)

我希望将扩展到以下内容:

static void Unique_23(void) {}
Run Code Online (Sandbox Code Playgroud)

这不起作用.使用令牌连接,定位宏按字面处理,最终扩展为:

static void Unique___LINE__(void) {}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

(是的,无论这看起来多么无用,我都有一个真正的理由要这样做).

c macros concatenation token

103
推荐指数
1
解决办法
6万
查看次数

如何使用宏在C++中生成随机变量名?

我正在用C++创建一个宏来声明一个变量并为它赋值.根据宏的使用方式,宏的第二次出现可以覆盖第一个变量的值.例如:

#define MY_MACRO int my_variable_[random-number-here] = getCurrentTime();
Run Code Online (Sandbox Code Playgroud)

使用它的另一个动机是避免为变量选择某个名称,以使其与开发人员最终使用宏选择的名称相同.

有没有办法在C++中的宏内生成随机变量名?

- 编辑 -

我的意思是独特但也是随机的,一旦我可以在一个块中使用我的宏两次,在这种情况下,它将生成如下:

int unique_variable_name;
...
int unique_variable_name;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,为了唯一,必须随机生成两个变量名.

c++ random variables macros naming

17
推荐指数
4
解决办法
2万
查看次数

预处理器指令,用于将符号与C中的变量值连接

这是符号连接在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模块,因此是一组独立的寄存器,只能通过模块的编号来改变名称.

例如,在四个模块的四个波特率寄存器是UBRR0L,UBRR1L,UBRR2L,UBRR3L.(还有几个,见下文).

在此输入图像描述

我需要编写一个函数来通过设置相关寄存器的值来初始化给定模块.由于寄存器名称仅因模块编号而异,如果我可以按照本文中的要求定义一些预处理器指令,我可以用一些符号编写一个表示寄存器名称的函数,因此符号将带有相关的寄存器名称和事情会好起来..

例如:

如果我可以定义conc(a,b)做我需要的,一个简单的功能

void init(int no){
    conc(UBRR,no) = 0xF0;
}
Run Code Online (Sandbox Code Playgroud)

将能够用来代表以下所有内容;

UBRR0 = 0xF0;
UBRR1 = 0xF0;
UBRR2 = 0xF0; …
Run Code Online (Sandbox Code Playgroud)

c macros avr-gcc c-preprocessor

1
推荐指数
1
解决办法
940
查看次数

标签 统计

macros ×3

c ×2

avr-gcc ×1

c++ ×1

c-preprocessor ×1

concatenation ×1

naming ×1

random ×1

token ×1

variables ×1