一行代码让我困惑,我无法解决它.它可以是一个函数地址的转换并将它分配给一个函数指针,但是'address'不应该存在.还是我完全脱离背景?
int32_t (*const my_func)(uint32_t address) = (int32_t (*)(uint32_t address)) nvm_addr;
Run Code Online (Sandbox Code Playgroud)
Tar*_*ama 15
int32_t (*const my_func)(uint32_t address)
Run Code Online (Sandbox Code Playgroud)
一个变量调用my_func,它将一个const指针存储到一个函数中,该函数接受uint32_t并返回一个int32_t.参数名称是可选的,它只是用于了解该参数的语义.
(int32_t (*)(uint32_t address)) nvm_addr
Run Code Online (Sandbox Code Playgroud)
这会转换nvm_addr为指向与...相同类型的函数的指针my_func.
总的来说,这只是存储函数指针的一种相当冗长的方式nvm_addr.
我经常有typedef这样的功能签名:
// signature of function
typedef int32_t my_sigT(uint32_t arg);
Run Code Online (Sandbox Code Playgroud)
在typedef我经常命名正式参数(仅为了可读性).
然后声明一个指向这些函数的常量指针
const my_sigT* my_func = (my_sigT*) nvm_addr;
Run Code Online (Sandbox Code Playgroud)
我发现在C和C++中这样做更具可读性......
在C++ 11,可以使用std::function<int32_t(uint32_t)>的闭包(而不是原始函数指针)用 auto.
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |