Página 1 de 1

Dúvidas em uma definição

MensagemEnviado: 01 Ago 2013 11:38
por chrdcv
Cambada, estou com uma dúvida aqui quanto a esta definição:

Código: Selecionar todos
#define SAMPLE_RATE   200   /* Sample rate in Hz. */
#define MS_PER_SAMPLE   ( (double) 1000/ (double) SAMPLE_RATE)
#define MS10   ((int) (10/ MS_PER_SAMPLE + 0.5))
#define MS25   ((int) (25/MS_PER_SAMPLE + 0.5))
#define DERIV_LENGTH   MS10
#define LPBUFFER_LGTH ((int) (2*MS25))
#define HPBUFFER_LGTH MS125


Em outra seção do código, onde um array é declarado e definido:
Código: Selecionar todos
static int data[LPBUFFER_LGTH], ptr = 0 ;


Uma mensagem de erro é dada ao compilar o código, dizendo algo como: impossível alocar (em tempo de compilação o array: "static int data" devido o índice não ser uma constante!

Oka, sei que macros são raízes de todo o bem, mas o cast presente nas definições apenas serve para garantir o truncamente, correto? O mais engraçado é que esse código era compilado normalmente por outros compiladores, no gcc não passa! Existe alguma diretiva de compilação que possa ser passada no Makefile garantindo a compilação?

Re: Dúvidas em uma definição

MensagemEnviado: 01 Ago 2013 19:40
por styg
ch, não sei o que te dizer, é F*** estar tanto tempo sem programar, lembro que já tive problemas assim, mas não lembro muito de como resolvi (mas resolvi).

bom, considerando que cada compilador tem suas firulas, eu tentaria isolar o problema, por exemplo:
- todos os defines estão eu mesmo arquivo
- a definição do LPBUFFER_LGTH bo código é feita numa posição anterior ao seu uso na declaração da array
- declara a matriz separado (em outra linha) daquele ponteiro
- precisa mesmo ser static
- tenta declarar a matriz com um comprimento fixo e vê se compila p ex. [5]

desculpa pela simploriedade da "ajuda".

Re: Dúvidas em uma definição

MensagemEnviado: 01 Ago 2013 20:12
por andre_luis
Acho que não consegue inicializar um buffer durante a sua criação.
Tenta separar :

Código: Selecionar todos
static int data[LPBUFFER_LGTH] ;
static int ptr = 0 ;



+++

Re: Dúvidas em uma definição

MensagemEnviado: 01 Ago 2013 23:39
por barboza
andre_teprom escreveu:Acho que não consegue inicializar um buffer durante a sua criação.
Tenta separar :

Código: Selecionar todos
static int data[LPBUFFER_LGTH] ;
static int ptr = 0 ;



+++


Também acredito nessa solução...

Apesar dele não tentar inicializar o buffer no código original, mas se quisesse (0 é o valor de inicialização neste caso):

Código: Selecionar todos
static int data[LPBUFFER_LGTH]  = {0, };


Mas acho que isso não funciona com variáveis estáticas.