begin process at 2012 05 30 00:05:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

[C/Linux]implicit declaration of registerrpc


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C/Linux]implicit declaration of registerrpc

jeudi 21 février 2008 à 09:04:52 | [C/Linux]implicit declaration of registerrpc

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

J'utilise la fonction registerrpc, et lorsque je compile avec les options habituelles (-Wall -ansi -pedantic), j'obtiens le warning suivant :

warning: implicit declaration of function `registerrpc'

Ce warning arrive habituellement quand on a pas déclaré le prototype de la fonction.
Donc qu'on a oublié le .h qui déclare cette fonction.
Le truc, c'est que le .h en question, je le cherche encore...

J'ai cherché dans tout /usr/include sans résultat.
Je songe à déclaré moi même le proto, mais bon ce serait pas top...

Donc voilou, si quelqu'un à une idée, merci.

Un code de test.
Il est incomplet, mais il compile alors qu'il devrait pas : il devrait faire une erreur too few arguements, mais à la place, il me fait une implicit declaration.
#include <errno.h>
#include <netinet/in.h>
#include <netdb.h>
#include <pthread.h>
#include <rpc/types.h>
#include <rpc/xdr.h>
#include <rpc/rpc.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <unistd.h>

int main()
{
registerrpc();
return 0;
}

jeudi 21 février 2008 à 11:11:07 | Re : [C/Linux]implicit declaration of registerrpc

laurent1024

Membre Club
registerrpc a des paramètres
registerrpc(prognum, versnum, procnum, procname, inproc, outproc) (d'apres ton lien)
donc tu ne peux pas appeller ta fonction sans paramètres.

Cdt


jeudi 21 février 2008 à 17:22:52 | Re : [C/Linux]implicit declaration of registerrpc

rt15

Membre Club Administrateur CodeS-SourceS
Merci pour cette première réponse.

Vi vi, bien sûr que registerrpc a des paramètres.

J'ai eu la flemme de copier coller tout mon code sur ce site vu que c'est du rpc et que ça demande pas mal de trucs à droite et à gauche à mettre dans les paramètres.

Cependant, le code ci-dessus est suffisant pour s'apercevoire qu'il y a un problème :
Il compile avec le warning "implicit declaration", alors qu'il devrait faire une erreur de compilation avec le message "too few arguements".

Bref, le code ci-dessus est suffisant pour constater que registerrpc n'est déclarée nul part...
jeudi 21 février 2008 à 17:30:50 | Re : [C/Linux]implicit declaration of registerrpc

laurent1024

Membre Club
Oui mais le code suivant
int main()
{
fonctionquiexistenulpart();
return 0;
}

risque de provoquer la même erreur. (Désolé je n'ai pas de compilo sous la main pour tester)



jeudi 21 février 2008 à 17:53:11 | Re : [C/Linux]implicit declaration of registerrpc

rt15

Membre Club Administrateur CodeS-SourceS
Bah ça ça fait ça :

main.c: In function `main':
main.c:7: warning: implicit declaration of function `fonctionquiexistenulpart'
/tmp/ccMW3X20.o(.text+0x1d): In function `main':
: undefined reference to `fonctionquiexistenulpart'
collect2: ld returned 1 exit status


Comme pour registerrpc, il ne trouve pas le proto, et le signal : warning implicit declaration.
Néanmoins, ce n'est qu'un warning à la compile.

Par contre, au link, contrairement à registerrpc, ld ne trouve pas l'implémentation : undefined reference to.
L'edition des liens est donc impossible et on a pas de binaire en sortie.

Si je met un proto de fonctionquiexistenulpart :

void fonctionquiexistenulpart(void * unargument);
J'obtiens :

main.c: In function `main':
main.c:9: error: too few arguments to function `fonctionquiexistenulpart'

Plante à la compilation. Bah vi, il manque des arguments.
Et si j'utilisais un proto sans argument, ça planterais en undefined reference to au link.

vendredi 22 février 2008 à 09:10:05 | Re : [C/Linux]implicit declaration of registerrpc

laurent1024

Membre Club
Il y a une exemple complet ici : http://www.xgarreau.org/forum5/read.php?1,11,22, essaye de le faire marcher.

Cdt      
vendredi 22 février 2008 à 11:02:44 | Re : [C/Linux]implicit declaration of registerrpc

rt15

Membre Club Administrateur CodeS-SourceS
En concaténant calc_h.h et server.c dans un même fichier, avec une compilation avec options -Wall -pedantic, je me bouffe :
main.c:20: warning: return type defaults to `int'
main.c: In function `xdr_varintarr':
main.c:21: warning: pointer targets in passing arg 3 of `xdr_array' differ in signedness
main.c:31:1: warning: C++ style comments are not allowed in ISO C90
main.c:31:1: warning: (this will be reported only once per input file)
main.c: In function `main':
main.c:32: warning: implicit declaration of function `registerrpc'

Bref, la question reste entière : pourquoi diable n'ont ils pas mis le prototype de registerrpc dans rpc.h ou autre ?

J'ai finalement mis le proto dans mon propre code, mais je comprend vraiment pas pourquoi j'aurais à le faire :

typedef char*procname_type();
int registerrpc(u_long prognum, u_long versnum, u_long uprocnum, procname_type procname, xdrproc_t inproc, xdrproc_t outproc);
vendredi 22 février 2008 à 11:36:43 | Re : [C/Linux]implicit declaration of registerrpc

laurent1024

Membre Club
Réponse acceptée !
A mon avis, c'est qu'il y a deux solutions :
soit les gens qui codent en rpc se foutent des warnings,
soit ils compilent sans l'option Wall :)

vendredi 22 février 2008 à 14:31:53 | Re : [C/Linux]implicit declaration of registerrpc

rt15

Membre Club Administrateur CodeS-SourceS
Vi, je crois pas que j'aurais de meilleur explication...

Merci pour le suivi de dossier.



Cette discussion est classée dans : include, of, declaration, implicit, registerrpc


Répondre à ce message

Sujets en rapport avec ce message

declaration d'un tableau [ par badsha ] bonjour j'arrive à comprendre pourquoi je ne peux pas mettre ça" int tab[t] = {1,2}; " au lieu de " int tab[2] = {1,2}; " ça marche avec " #define t 3 Aide en Qt [ par fredrizk ] Bonjour Je suis entrain d'écrire un logiciel pour mon entreprise et j'aurai besoin d'aide, c'est la première fois que je fais du Qt Jusqu'à présent Utilisation DLL dynamique / getprocAddress null [ par Inutqen ] Bonjour à tous ! J'essaye d'utiliser une DLL fournie sans .lib, mais avec un beau .h, du coup je tente la combo LoadLibrary et GetProcAddress. Le pro Connection base de données sql server via ODBC en C [ par Kizera ] Bonjour, j'ai un programme qui me permet de me connecter à une base sql server mais le problème c'est qu'il me manque 1 champ à compléter et que je ne calculs tableau [ par 3463 ] Salut à tous !! J'ai besoin de votre aide [^^happy13] Voici mon programme : # include # include # include # include # include # include # incl code qui donne le temps d'exécution sous linux [ par elhajjajireda ] Bonjour, si le vous plait est ce que vous pouvez m'aider un peu pour comprendre ce code qui permet d'obtenir le temps d'exécution sous linux [code=cp Tableau C [ par 3463 ] Salut à tous j'ai vraiment besoin de votre aide !! [code=cpp] # include # include # include # include # include # include # include using nam Débutant C : Problème pour récupérer une valeur dans un thread [ par eustatika ] Bonjour, [^^clinoeil1] Je débute en C et suis actuellement bloqué lorsqu'il s'agit de renvoyer une valeur à la fin de l'exécution d'un thread. Voici m QT sous Visual C++ 2008 : SOUS XP [ par controlleur ] Bonjour j'ai rencontré une erreur l'or de l'exécution de mon programme : l'erreur c'est qu'il me dise que les QComboBox et QSlider que j'ai déclar


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,778 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales