在 C 中的定义中为函数指针分配地址



我想在定义中为函数指针分配地址,可以吗?我想在定义中执行此操作:

void (* uart_puts)(char *) = (void(*)(char * )) 0x0000000000008248;
char (* msg) = (char *) 0x7fb8;

谢谢!

更新:

我正在编译这个函数,我想在 .h 中获取两个变量以简化我的 .c 文件。我不知道这是否可能,但理想情况下,在两个定义语句中获取这些定义。

void function()
{
void (* uart_puts)(char *) = (void(*)(char * )) 0x0000000000008248;
char (* msg) = (char *) 0x7fb8;
while (1)
{
uart_puts(msg);
}
}

你可以做:

#define uart_puts ((void(*)(char*))0x000000008248)

然后使用它:

void f() { 
uart_puts("a"); 
}

文本"uart_puts"将由预处理器附加。请记住,这意味着宏定义后的所有符号/文本"uart_puts"都将被替换。

但是最好存储信息,它是一个函数宏:

#define uart_puts(str)  ((void(*)(char*))0x000000008248)(str)

这样,您可以调用uart_puts(smth),但无法获取函数指针。

你也可以在头文件中声明一个static变量,通常使用 const:

static void (* const uart_puts)(char *) = (void (*)(char*)) 0x0000000ffda;

这是在 C 语言中在头文件中声明常量的另一种方法,通常使用程序员知道的编译器,将优化静态 const 变量并将其删除(如果未使用(。

最新更新