Действительно простая ошибка;Я, наверное, забыл точку с запятой - PullRequest
0 голосов
/ 08 сентября 2010

Я получаю множество ошибок, подобных этим:

gfx.h:48: error: syntax error before 'buffer'

gfx.h:48: warning: type defaults to 'int' in declaration of 'buffer'

gfx.h:48: warning: data definition has no type or storage class

gfx.h:73: error: syntax error before 'uint16_t'

gfx.h:73: warning: no semicolon at end of struct or union

gfx.h:74: warning: type defaults to 'int' in declaration of 'visible_lines_per_frame'

gfx.h:74: warning: data definition has no type or storage class
...

Я немного устал, поэтому я не могу понять, что может быть причиной этого.

Этоопределение buffer (начиная со строки 43 и заканчивая строкой 57):

/* 8-bit architecture (not yet used.) */
#if   PROC_BIT_SIZE == 8
uint8_t buffer[GFX_SIZE];
# define GFX_PIXEL_ADDR(x,y) (x / 8) + (y * (GFX_WIDTH / 8))
/* 16-bit architecture: dsPIC */
#elif  PROC_BIT_SIZE == 16
uint16_t buffer[GFX_SIZE / 2];
# define GFX_PIXEL_ADDR(x,y) (x / 16) + (y * (GFX_WIDTH / 16))
/* 32-bit architecture: AVR32(?), STM32 */
#elif  PROC_BIT_SIZE == 32
uint32_t buffer[GFX_SIZE / 4];
# define GFX_PIXEL_ADDR(x,y) (x / 32) + (y * (GFX_WIDTH / 32))
/* Other, unknown bit size.*/
#else
# error "processor bit size not supported"
#endif

(Он предназначен для поддержки 8-разрядных MCU с несколькими архитектурами и 32-разрядных MCU.)

Я определил uint8_t и т. Д., Поскольку используемый GCC, похоже, не имеет заголовка stdint.h.

Вот как я определил uint8_t и т. Д.

/* 
 * stdint.h support.
 * If your compiler has stdint.h, uncomment HAS_STDINT.
 */
//#define HAS_STDINT
#ifndef HAS_STDINT
// D'oh, compiler doesn't support STDINT, so create our own,
// 'standard' integers.
# if PROC_BIT_SIZE == 8 || PROC_BIT_SIZE == 16
typedef char int8_t;
typedef int int16_t;
typedef long int32_t;
typedef long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
typedef unsigned long long uint64_t;
# elif PROC_BIT_SIZE == 32
typedef char int8_t;
typedef short int16_t;
typedef int int32_t; // usually int is 32 bits on 32 bit processors, but this may need checking
typedef long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long uint64_t;
# endif
#else
# include <stdint.h>
#endif

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

warning: no semicolon at end of struct or union подразумевает, что вы оставили точку с запятой в конце struct или union, определенного ранее в том же файле или в другом заголовке, который был включен ранее. Это может привести к искаженным утверждениям, таким как:

struct S { ... } uint8_t buffer[GFX_SIZE];
0 голосов
/ 08 сентября 2010

Я, видимо, решил свою проблему.

Моя ошибка состояла в том, что я не объявил PROC_BIT_SIZE до определения "typedef" для uint8_t и друзей. Поэтому препроцессор проигнорировал объявления, вызвав ошибку.

Просто ошибка моей собственной работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...