【发布时间】:2018-06-15 04:13:26
【问题描述】:
我正在尝试为 Crazyradio PA 编译固件(但问题并非特定于它),我在其中添加了我需要的来自 Nordic Semiconductor 的 SDK 的库。
该库最初打算在 Keil µVision IDE 下编译,所以我很自然地更改了代码中的所有内容以使其与 SDCC 一起工作而没有太多麻烦,但是一个简单的指针定义让我很吃力。 SDCC 编译器给了我这个错误:
syntax error: token -> 'unsigned' ; column 10
对应代码中的这一行:
unsigned char * buf = (unsigned char *)pbuf;
pbuf 是一个无符号字符指针,作为所有这些代码所在的函数的参数传递。
我尝试了以下方法,但没有成功:
- 改变buf的数据类型(随便改,随便看看)
- 通过注释前后行来隔离问题
- 分配一个简单的值而不是 (unsigned char *)pbuf
问题仍然相同(数据类型的差异当然也会发生变化)。解决方案可能很简单,但我的想法很短,而且我只是一名实习生,对 SDCC 的经验很少,所以我希望你能放纵一下。
再次感谢,请教我做错了什么! :)
【问题讨论】:
-
... 而上一行代码是...
-
前一行代码不会影响这一行,因为当注释 ouf 时,它给出了严格相同的输出错误。作为记录,如果我错了:
memtype = *(unsigned char*)(&pbuf);谢谢 ;) -
int main(void) { unsigned char * buf = (unsigned char *)0; }怎么样? -
我猜问题是编译器是C89编译器,变量声明必须在块的开头。您可以尝试在声明周围添加
{ ... }。 -
@JMA : 你是错了——前一行是重要的,或者更重要的是声明的上下文很重要。如果在同一范围内此声明之前还有其他非声明性语句/表达式,则将其注释掉可能不会更改上下文。您应该编辑问题以提供所请求的信息,而不是在 cmets 中包含相关信息。