Discussion:
typedef de arrays
(demasiado antiguo para responder)
Nor
2007-06-29 08:24:21 UTC
Permalink
Hola estoy intentando compilar con el gcc las lineas de codigo que muestro
abajo(en realidad es un extracto de un programa) y no consigo compilarlo
sin war
nings (pasando la opcion -Wall al gcc)

me da siempre el problema
aPunto.c:22: warning: passing arg 1 of `pintaPunto1' from incompatible
pointer type

he intentado pasarle tambien la direccion, direccion de elemento 0 y nada.
Aunque parezca absurdo la funcion pintapunto2 es porque como he dicho es un
extracto de otro programa.
Gracias y espero podais ayudarme

/**********************************aPunto.c*************************************/
/*gcc -Wall aPunto.c */
#include <stdio.h>
#include <stdlib.h>

typedef float aPunto[3];
//typedef struct {float a[3];}aPunto;

void pintaPunto1(aPunto *pto)
{
int i;
//printf("pintaPunto1: ptr=0x%X\n",&pto);
for(i=0;i<3;i++)
printf("%f ",(*pto)[i]);
printf("\n");
//for(i=0;i<3;i++) printf("%f ",(pto)[i]);printf("\n");
}

void pintaPunto2(aPunto pto)
{
//printf("pintaPunto2: ptr=0x%X &ptr=0x%X \n",pto,&pto);
pintaPunto1(pto);
}


int main()
{
aPunto pto;
pto[0]=1;
pto[1]=2;
pto[2]=3;
printf("llamo pintaPunto1\n");
pintaPunto1(&pto);
printf("llamo pintaPunto2\n");
pintaPunto2(pto);
return 0;
}
Claudio
2007-06-29 14:24:15 UTC
Permalink
Post by Nor
aPunto.c:22: warning: passing arg 1 of `pintaPunto1' from incompatible
pointer type
void pintaPunto1(aPunto *pto)
{
}
void pintaPunto2(aPunto pto)
{
//printf("pintaPunto2: ptr=0x%X &ptr=0x%X \n",pto,&pto);
pintaPunto1(pto);
Mejor pintaPunto1(&pto);

Un saludo.
s***@gmail.com
2007-06-30 14:06:12 UTC
Permalink
Post by Claudio
Post by Nor
aPunto.c:22: warning: passing arg 1 of `pintaPunto1' from incompatible
pointer type
void pintaPunto1(aPunto *pto)
{
}
void pintaPunto2(aPunto pto)
{
//printf("pintaPunto2: ptr=0x%X &ptr=0x%X \n",pto,&pto);
pintaPunto1(pto);
Mejor pintaPunto1(&pto);
Un saludo.
Si bueno, esque eso no se por que pero pasa mal el valor, por lo menos
a mi.
Si coges el codigo lo compilas y pones Mejor pintaPunto1(&pto); veras
como no muestra lo mismo en los dos casos

Mi info del gcc es por si tuviera algo que ver:
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c+
+,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-
system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-
threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/
4.1.3 --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu
--enable-libstdcxx-debug --enable-mpfr --enable-checking=release
x86_64-linux-gnu
Thread model: posix
gcc version 4.1.3 20070601 (prerelease) (Debian 4.1.2-12)
Claudio
2007-07-03 18:03:26 UTC
Permalink
Post by s***@gmail.com
Si bueno, esque eso no se por que pero pasa mal el valor, por lo menos
a mi.
Si coges el codigo lo compilas y pones Mejor pintaPunto1(&pto); veras
como no muestra lo mismo en los dos casos
Sip, tienes razon. Olvida mi comentario anterior, que estaba
mal. El quiz de la cuestion es que los arrays se pasan
a las funciones por referencia, es decir, que es lo mismo
func(arr) que func(&arr[0])
Ten en cuenta que pto es una _constante_ para el compilador,
exactamente la dirección del primer elemento del array. No
tengo muy claro lo que debe hacer el compilador cuando intentas
hallar su direccion con &pto . ¿ Quiza lo deja inalterado ?
En todo caso, la función pintaPunto2 la tienes declarada como
que le llega un aPunto = un array = una direccion al primer elemento
del array = un *float

Te funciona si le pones:
pintaPunto1((aPunto *) pto);
[...]

No deberia tener nada que ver.

Un saludo.
s***@gmail.com
2007-07-05 16:31:42 UTC
Permalink
Post by Claudio
Post by s***@gmail.com
Si bueno, esque eso no se por que pero pasa mal el valor, por lo menos
a mi.
Si coges el codigo lo compilas y pones Mejor pintaPunto1(&pto); veras
como no muestra lo mismo en los dos casos
Sip, tienes razon. Olvida mi comentario anterior, que estaba
mal. El quiz de la cuestion es que los arrays se pasan
a las funciones por referencia, es decir, que es lo mismo
func(arr) que func(&arr[0])
Ten en cuenta que pto es una _constante_ para el compilador,
exactamente la direcci�n del primer elemento del array. No
tengo muy claro lo que debe hacer el compilador cuando intentas
hallar su direccion con &pto . � Quiza lo deja inalterado ?
En todo caso, la funci�n pintaPunto2 la tienes declarada como
que le llega un aPunto = un array = una direccion al primer elemento
del array = un *float
pintaPunto1((aPunto *) pto);
[...]
No deberia tener nada que ver.
Un saludo.
perfecto, funciona a las mil maravillas.
No se como no se me ocurrio dentro de todas las cosas con las que
prov� :-(

Muchas gracias, me acaban de desaparecer un monton de lineas de
warning.

Loading...