我想在定义中为函数指针分配地址,可以吗?我想在定义中执行此操作:
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 变量并将其删除(如果未使用(。