error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
我正在尝试用 C 为 Game Boy Advance 创建一个 1bpp 位图字体,本质上我想创建一个由 (ASCII CODE - 32)*8 索引的连续 ROM 数据区域。到目前为止,我收到了这条我不理解的错误消息。
错误:
C:/Users/puppy/Documents/ARMDevTools/SrcGBA/PaintBoyAdvance/source/paintboyadvance.c:35:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
35 | bitmapfont[0].pixelsPerLetter[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
| ^
C:/Users/puppy/Documents/ARMDevTools/SrcGBA/PaintBoyAdvance/source/paintboyadvance.c:36:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
36 | bitmapfont[1].pixelsPerLetter[] = {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00};
| ^
================ READY ================
导致错误的源代码(最小可重现示例):
struct letter{
char PixelsPerLetter[8];
};
struct letter bitmapfont[96];
bitmapfont[0].PixelsPerLetter[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
bitmapfont[1].PixelsPerLetter[] = {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00};
int main(void)
{
return 0;
}
据我所知,行尾没有遗漏任何分号,所以我不明白为什么我什至需要列出的字符。这就是您在数组中定义每个结构的方式,不是吗?有这样的点?这就是我见过的所有示例所显示的内容,但我收到此错误。
编辑:将所有内容移入 main 给我一个不同的错误:
C:/Users/puppy/Documents/ARMDevTools/SrcGBA/PaintBoyAdvance/source/paintboyadvance.c:12:39: error: expected expression before ']' token
12 | bitmapfont[0].PixelsPerLetter[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
| ^
C:/Users/puppy/Documents/ARMDevTools/SrcGBA/PaintBoyAdvance/source/paintboyadvance.c:13:39: error: expected expression before ']' token
13 | bitmapfont[1].PixelsPerLetter[] = {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00};
这个我也看不懂
您只能在实例化时初始化。您已尝试在任何函数之外进行赋值 - 这将不起作用。
struct letter bitmapfont[96]= { {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00} } ;
您可以初始化在文件范围内声明的变量,但不能对其赋值,因为赋值被视为 运行 时间代码。在 运行 时间执行的所有代码必须位于函数内部。
如前所述,您可以通过重写代码以使用初始化来解决此问题:
struct letter bitmapfont[96] =
{
[0] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
[1] = {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00},
...
};
此外,这听起来不应该在 运行 时间内更改,因此您应该添加 const
并确保它在闪存中分配。
如果出于任何原因确实需要在 运行 时更改它,可以使用复合文字:
{
// inside a function
bitmapfont[0] = (struct letter){0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
}
我正在尝试用 C 为 Game Boy Advance 创建一个 1bpp 位图字体,本质上我想创建一个由 (ASCII CODE - 32)*8 索引的连续 ROM 数据区域。到目前为止,我收到了这条我不理解的错误消息。
错误:
C:/Users/puppy/Documents/ARMDevTools/SrcGBA/PaintBoyAdvance/source/paintboyadvance.c:35:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
35 | bitmapfont[0].pixelsPerLetter[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
| ^
C:/Users/puppy/Documents/ARMDevTools/SrcGBA/PaintBoyAdvance/source/paintboyadvance.c:36:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
36 | bitmapfont[1].pixelsPerLetter[] = {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00};
| ^
================ READY ================
导致错误的源代码(最小可重现示例):
struct letter{
char PixelsPerLetter[8];
};
struct letter bitmapfont[96];
bitmapfont[0].PixelsPerLetter[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
bitmapfont[1].PixelsPerLetter[] = {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00};
int main(void)
{
return 0;
}
据我所知,行尾没有遗漏任何分号,所以我不明白为什么我什至需要列出的字符。这就是您在数组中定义每个结构的方式,不是吗?有这样的点?这就是我见过的所有示例所显示的内容,但我收到此错误。
编辑:将所有内容移入 main 给我一个不同的错误:
C:/Users/puppy/Documents/ARMDevTools/SrcGBA/PaintBoyAdvance/source/paintboyadvance.c:12:39: error: expected expression before ']' token
12 | bitmapfont[0].PixelsPerLetter[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
| ^
C:/Users/puppy/Documents/ARMDevTools/SrcGBA/PaintBoyAdvance/source/paintboyadvance.c:13:39: error: expected expression before ']' token
13 | bitmapfont[1].PixelsPerLetter[] = {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00};
这个我也看不懂
您只能在实例化时初始化。您已尝试在任何函数之外进行赋值 - 这将不起作用。
struct letter bitmapfont[96]= { {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00} } ;
您可以初始化在文件范围内声明的变量,但不能对其赋值,因为赋值被视为 运行 时间代码。在 运行 时间执行的所有代码必须位于函数内部。
如前所述,您可以通过重写代码以使用初始化来解决此问题:
struct letter bitmapfont[96] =
{
[0] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
[1] = {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x00},
...
};
此外,这听起来不应该在 运行 时间内更改,因此您应该添加 const
并确保它在闪存中分配。
如果出于任何原因确实需要在 运行 时更改它,可以使用复合文字:
{
// inside a function
bitmapfont[0] = (struct letter){0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
}