C/C++ uchar [resolvido]

5 respostas
MaiqueL

Olá,

Tenho uma função em C/C++ que retorna um ponteiro para um uchar.

#define get_channel(i, j, frame, channel) ((uchar *)(frame->imageData + j*frame->widthStep))[i*frame->nChannels]

Eu preciso atribuir valores dessa função a um vetor de inteiros.

Como isso ficaria ?

5 Respostas

ViniGodoy
  1. Esse código está escrito em C, não em C++;
  2. Isso que você está mostrando é uma macro, não uma função;
  3. O retorno é dado por um typecast inseguro e perigoso;

Para atribuir valores faça:

seuArray[5] = get_channel(0,0, frame, channel)[0];

MaiqueL

só uma obs eu consegui faze essa atribuição só assim :

seuArray[5] = get_channel(0,0, frame, channel);

E os trechos de code onde existem essa macro estão meio problemáticos…

  • uma vez vlw ViniGodoy.
ViniGodoy

Tá certo, está retornando um índice.

Uma dica… o melhor é substituir macros por funções. Macros são substituição de texto. Elas não aparecem em erros de compilação, em call stacks, e elas podem gerar code bloat. Se for realmente necessário que a função trabalhe como uma macro, faça ela inline.

Macros também tem o problema de serem substituição de texto. Por exemplo, vamos pegar uma macro simples:
#define max(a,b) a > b ? a : b;

Isso aí aparentemente funciona, certo? Mas veja o que acontece se fizermos:
int x = max(a++, b);

O código fica substituido por:
int x = a++ >; b ? a++ : b;

Percebeu uma soma de a duas vezes?

No C e no C++, 80% do código é organização e segurança no que você está fazendo. Se você começar a fazer as coisas sem entender EXATAMENTE o que está acontecendo, logo vai recair em memory leaks, dangling pointers e outras coisas tenebrosas.

E

ViniGodoy:

No C e no C++, 80% do código é organização e segurança no que você está fazendo. Se você começar a fazer as coisas sem entender EXATAMENTE o que está acontecendo, logo vai recair em memory leaks, dangling pointers e outras coisas tenebrosas.

Tanto é que, se eu fosse ter minha própria empresa, não faria quase absolutamente nada em C/C++ (exceto o que eu mesmo escrevesse).
É raro achar pessoas hoje em dia que entendam o que está acontecendo “por debaixo dos panos”, o que é indispensável ao se usar C/C++.

ViniGodoy

entanglement:
Tanto é que, se eu fosse ter minha própria empresa, não faria quase absolutamente nada em C/C++ (exceto o que eu mesmo escrevesse).
É raro achar pessoas hoje em dia que entendam o que está acontecendo “por debaixo dos panos”, o que é indispensável ao se usar C/C++.

Acho que se não fosse para trabalhar com processamento de imagens, som, jogos, ou outra aplicação de tempo real que o GC pode incomodar, eu não usaria C ou C++. C# e Java seriam opções certas.

Criado 10 de abril de 2010
Ultima resposta 12 de abr. de 2010
Respostas 5
Participantes 3