Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de compilation makefile

8 réponses
Avatar
tt
Bonjour,

J'ai migré une machine de Unix HP 10 à Unix HP 11. En recompilant mes
programmes *.c, je rencontre les problèmes de compilation suivants :

cc: "../../toto/tata/testes.c", line 804: warning 563: Argument #1 is not
the correct type.
cc: "../../toto/tata/testes.c",, line 804: error 1718: Types are not
assignment-compatible.
memset( var1, 0, sizeof(var1));

cc: "../../toto/tata/testes.c", line 1306: error 1718: Types are not
assignment-compatible.
cc: "../../toto/tata/testes.c", line 1306: warning 563: Argument #2 is not
the correct type.
memcpy(tic,var1,sizeof(var2));

Quelqu'un peut me dire ce qu'il faut faire ?

Merci

8 réponses

Avatar
Marc Boyer
In article <chmucv$poc$, tt wrote:
Bonjour,

J'ai migré une machine de Unix HP 10 à Unix HP 11. En recompilant mes
programmes *.c, je rencontre les problèmes de compilation suivants :

cc: "../../toto/tata/testes.c", line 804: warning 563: Argument #1 is not
the correct type.
cc: "../../toto/tata/testes.c",, line 804: error 1718: Types are not
assignment-compatible.
memset( var1, 0, sizeof(var1));


Sans connaître le type de var1, c'est difficile à dire.
Généralement, on trouve plutôt
memset( &var1, 0, sizeof(var1) );

cc: "../../toto/tata/testes.c", line 1306: error 1718: Types are not
assignment-compatible.
cc: "../../toto/tata/testes.c", line 1306: warning 563: Argument #2 is not
the correct type.
memcpy(tic,var1,sizeof(var2));


Sans connaître les types de tic, var1 et var2, c'est dur de
dire quoi que ce soit.
Au fait, c'est pas les vrais noms ?

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Avatar
Marc Boyer
Erwan David wrote:
Quelqu'un peut me dire ce qu'il faut faire ?


vérifier que var1 a bien un type compatible avec le prototype de
memset et memcpy, soit void*.


Tu veux bien dire T* ?
A ma connaissance, tous les types pointeurs sont
compatibles avec void*, non ?

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...


Avatar
tt
Effectivement, ce n'est pas les bons noms. Mais, les erreurs n'apparaissent
plus en écrivant : memset( &var1, 0, sizeof(var1) ).
Par contre, j'ai d'autres problèmes :

Problème N°1

lecture_504.c", line 233: warning 604: Pointers are not
assignment-compatible.
lecture_504.c", line 233: warning 563: Argument #1 is not the correct type.

Avec à la ligne 233 du fichier : strcpy(buffer,getenv("UID"));
Sachant que buffer est déclaré en ----> char buffer [30];

Problème N°2

line 615: warning 527: Integral value implicitly converted to pointer in
assignment
avec à la ligne 615 : fabon=fopen(file_name_abonne, "r");

sachant que :

short lecture_504(file_name_abonne, file_name_abonne_lst)
{
fabon=fopen(file_name_abonne, "r");
..............
}

Problème N°3

line 72: warning 604: Pointers are not assignment-compatible.
avec à la ligne 72 : tp = time(&tp);
sachant que time_t *tp;

Merci d'avoir répondu aussi vite






"Marc Boyer" a écrit dans le message
de news:chmunc$e0r$
In article <chmucv$poc$, tt wrote:
Bonjour,

J'ai migré une machine de Unix HP 10 à Unix HP 11. En recompilant mes
programmes *.c, je rencontre les problèmes de compilation suivants :

cc: "../../toto/tata/testes.c", line 804: warning 563: Argument #1 is
not


the correct type.
cc: "../../toto/tata/testes.c",, line 804: error 1718: Types are not
assignment-compatible.
memset( var1, 0, sizeof(var1));


Sans connaître le type de var1, c'est difficile à dire.
Généralement, on trouve plutôt
memset( &var1, 0, sizeof(var1) );

cc: "../../toto/tata/testes.c", line 1306: error 1718: Types are not
assignment-compatible.
cc: "../../toto/tata/testes.c", line 1306: warning 563: Argument #2 is
not


the correct type.
memcpy(tic,var1,sizeof(var2));


Sans connaître les types de tic, var1 et var2, c'est dur de
dire quoi que ce soit.
Au fait, c'est pas les vrais noms ?

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...



Avatar
Marc Boyer
Erwan David wrote:
Oui, mais dans la question rien n'indique que les var1 soient de type
pointeur...
(le soit void* se rapportait aux prototypes de memset et memcpy).


Au temps pour moi.

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Avatar
Marc Boyer
In article <chmvl7$q7a$, tt wrote:
Effectivement, ce n'est pas les bons noms. Mais, les erreurs n'apparaissent
plus en écrivant : memset( &var1, 0, sizeof(var1) ).


Ce que je me demande, c'est quel pouvait être le comportement
du code avant cette correction...

C'était pas un tableau var1 ?

lecture_504.c", line 233: warning 604: Pointers are not
assignment-compatible.
lecture_504.c", line 233: warning 563: Argument #1 is not the correct type.

Avec à la ligne 233 du fichier : strcpy(buffer,getenv("UID"));
Sachant que buffer est déclaré en ----> char buffer [30];


Aucune idée...

Problème N°2

line 615: warning 527: Integral value implicitly converted to pointer in
assignment
avec à la ligne 615 : fabon=fopen(file_name_abonne, "r");


Sans les types des variables, c'est difficile de
corriger les erreurs de typage...

Problème N°3

line 72: warning 604: Pointers are not assignment-compatible.
avec à la ligne 72 : tp = time(&tp);
sachant que time_t *tp;


En supposant:
time_t time(time_t *t);
Je propose
time_t tp;
tp= time(&tp);

Mais, heuh, t'es l'auteur de ces lignes ?

Merci d'avoir répondu aussi vite


Merci de répondre "en dessous" du message, et de ne pas
recopier les messages inutiles.

Nouveau sur les news ?
http://www.usenet-fr.news.eu.org/

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Avatar
cedric
tt wrote:
Problème N°1

lecture_504.c", line 233: warning 604: Pointers are not
assignment-compatible.
lecture_504.c", line 233: warning 563: Argument #1 is not the correct type.

Avec à la ligne 233 du fichier : strcpy(buffer,getenv("UID"));
Sachant que buffer est déclaré en ----> char buffer [30];


T'aurais pas oublié d'inclure le prototype de strcpy
(cad <string.h>) ? Sinon, peut etre une histoire de const...?

Problème N°2

line 615: warning 527: Integral value implicitly converted to pointer in
assignment
avec à la ligne 615 : fabon=fopen(file_name_abonne, "r");

sachant que :

short lecture_504(file_name_abonne, file_name_abonne_lst)


Donc file_name_abonne et file_name_abonne_lst sont des int ?
Pas bien ca...

Avatar
Yves ROMAN

Effectivement, ce n'est pas les bons noms. Mais, les erreurs n'apparaissent
plus en écrivant : memset( &var1, 0, sizeof(var1) ).


On suppose donc que var1 n'est pas un tableau, sinon ce na'urait pas été
nécessaire

Par contre, j'ai d'autres problèmes :

Problème N°1

lecture_504.c", line 233: warning 604: Pointers are not
assignment-compatible.
lecture_504.c", line 233: warning 563: Argument #1 is not the correct type.

Avec à la ligne 233 du fichier : strcpy(buffer,getenv("UID"));
Sachant que buffer est déclaré en ----> char buffer [30];



Peut-être manque-t-il les #include pour les prototypes de strcpy() et getenv()
Le compilateur suppose par défaut que strcpy prend des int en parametres et que
getenv() retourne un int
-> Rajouter les #include nécessaires

Problème N°2

line 615: warning 527: Integral value implicitly converted to pointer in
assignment
avec à la ligne 615 : fabon=fopen(file_name_abonne, "r");

sachant que :

short lecture_504(file_name_abonne, file_name_abonne_lst)
{
fabon=fopen(file_name_abonne, "r");
..............
}


Si cette syntaxe passe avec ton compilateur, il suppose par défaut que
file_name_abonne et file_name_abonne_ls sont des int.
2 possibilités pour la cause d'erreur :
- il n'a pas de prototype de fopen() et fabon est déclaré comme pointeur ->
c'est la conversion du retour de fepen() (int par défaut) en pointeur qui cause
le warning
- il y a un prototype de fopen() ->c'est la conversion de file_name_abonne en
char * qui cause le waring

-> déclarer
short lecture_504(char *file_name_abonne, char *file_name_abonne_lst)
{
..............
}
-> et rajouter les #include pour fopen()

Problème N°3

line 72: warning 604: Pointers are not assignment-compatible.
avec à la ligne 72 : tp = time(&tp);
sachant que time_t *tp;



Si time_t est connu, je suppose que le prototype de time() aussi. Dans ce cas le
compilateur trouve 2 erreurs
- on passe à time() un time_t** au lieu d'un time_t*
- on met un time_t dans un time_t *
Si ca marche c'est peut-être parce que sizeof(time_t) == sizeof(time_t *)
et parce que par la suite, on utilise tp comme un time_t au lieu d'un time_t *

Tu voulais en fait faire
time_t t
t = time(&t) ;
ou
t = time(NULL) ;
ou
time(&t) ;

J'ai migré une machine de Unix HP 10 à Unix HP 11. En recompilant mes
programmes *.c, je rencontre les problèmes de compilation suivants :


Visiblement, le code migré est vieux (pas d'utilisation de prototypes) et source
de beaucoup de bugs potentiels ...

Avatar
Charlie Gordon
"Yves ROMAN" wrote in message
news:

Effectivement, ce n'est pas les bons noms. Mais, les erreurs
n'apparaissent


plus en écrivant : memset( &var1, 0, sizeof(var1) ).


On suppose donc que var1 n'est pas un tableau, sinon ce na'urait pas été
nécessaire


La correction est incantatoire ! C'est la méthode du chimpanzé :
"Je ne sais pas ce que fait ce code, d'ailleurs c'est quoi du code ?"
"Mais en tapant au hasard sur le clavier, ça compile !"
"Donc le problème est corrigé !"
Soit le code était buggé avant, soit il l'est maintenant avec cette modif !

J'ai migré une machine de Unix HP 10 à Unix HP 11. En recompilant mes
programmes *.c, je rencontre les problèmes de compilation suivants :


Visiblement, le code migré est vieux (pas d'utilisation de prototypes) et
source

de beaucoup de bugs potentiels ...


Non seulement le code est vieux, mais le compilateur sur lequel il est porté
est mal configuré. Il faut modifier le Makefile pour rajouter des warnings
au moins pour utilisation de fonctions non définies. Si c'est gcc (j'en
doute!) je recommande -Wall.

Chqrlie.