问大家个语法问题

啊姆架构狮 2019-03-15 09:15:23
CcpInit(SYS_CLK); //注释写的是使用48m时钟,别人写好用过的驱动代码。 对应的宏是: typedef void (*pCcpInit)( unsigned char mode );
#define CcpInit ((pCcpInit)((*(unsigned long *)(0x01005024)))) #define SYS_CLK ((0)) //我把两个数字的宏直接替换了 看不懂什么意思,同事说pCcpInit指向地址0x01005024储存的值(是个函数的首地址),可我看感觉像个语法错误,pCcpInit没定义函数指针,赋值也不像这么赋值的,拷贝到C-free编译器里,把0x01005024改成符合指针的函数的首地址,无警告错误,但是打印页面停止运行了
...全文
75 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊姆架构狮 2019-03-16
  • 打赏
  • 举报
回复
引用 3 楼 lin5161678 的回复:
[quote=引用 2 楼 drakelovejoker 的回复:] [quote=引用 1 楼 sdghchj 的回复:] pCcplint是typedef定义的函数指针类型。 于是CcpInit就相当于函数指针了
那请问((*(unsigned long *)(0x01005024)))这个放在函数指针旁边是什么意思呢? typedef 函数指针用法不是 pCcpInit S1; //定义一个函数指针S1 S1 = XXX; //赋值S1吗 从结果上看CcpInit是个pCcpInit类型的函数指针,形参输入(0)[/quote] 强制类型转换 (类型)表达式 看不懂就拆分吧
typedef void (*pCcpInit)( unsigned char mode );
#define	CcpInit ((pCcpInit)((*(unsigned long *)(0x01005024))))
#define SYS_CLK ((0))
CcpInit(SYS_CLK);
CcpInit(SYS_CLK) 展开 ((pCcpInit)((*(unsigned long *)(0x01005024))))((0)) unsigned long* plong = (unsigned long *)0x01005024; unsigned long nlong = *plong; pCcpInit pFun = (pCcpInit)nlong; pFun(0); [/quote] 懂了,谢谢老哥
lin5161678 2019-03-16
  • 打赏
  • 举报
回复
引用 2 楼 drakelovejoker 的回复:
[quote=引用 1 楼 sdghchj 的回复:]
pCcplint是typedef定义的函数指针类型。
于是CcpInit就相当于函数指针了

那请问((*(unsigned long *)(0x01005024)))这个放在函数指针旁边是什么意思呢?
typedef 函数指针用法不是 pCcpInit S1; //定义一个函数指针S1
S1 = XXX; //赋值S1吗
从结果上看CcpInit是个pCcpInit类型的函数指针,形参输入(0)[/quote]
强制类型转换
(类型)表达式
看不懂就拆分吧
typedef void (*pCcpInit)( unsigned char mode );
#define CcpInit ((pCcpInit)((*(unsigned long *)(0x01005024))))
#define SYS_CLK ((0))
CcpInit(SYS_CLK);

CcpInit(SYS_CLK)
展开
((pCcpInit)((*(unsigned long *)(0x01005024))))((0))
unsigned long* plong = (unsigned long *)0x01005024;
unsigned long nlong = *plong;
pCcpInit pFun = (pCcpInit)nlong;
pFun(0);



啊姆架构狮 2019-03-16
  • 打赏
  • 举报
回复
引用 1 楼 sdghchj 的回复:
pCcplint是typedef定义的函数指针类型。 于是CcpInit就相当于函数指针了
那请问((*(unsigned long *)(0x01005024)))这个放在函数指针旁边是什么意思呢? typedef 函数指针用法不是 pCcpInit S1; //定义一个函数指针S1 S1 = XXX; //赋值S1吗 从结果上看CcpInit是个pCcpInit类型的函数指针,形参输入(0)
sdghchj 2019-03-15
  • 打赏
  • 举报
回复
pCcplint是typedef定义的函数指针类型。 于是CcpInit就相当于函数指针了

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧