Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2271 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  inline en C

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

inline en C

n°303758
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 11:24:30  profilanswer
 

Code :
  1. static int
  2. geiCmpTinyMosaic(
  3. tinyMosaicRec   *pRec1,
  4. tinyMosaicRec   *pRec2
  5. )
  6. {
  7. return dbIsIdEqual(pRec1->mosaicId, pRec2->mosaicId) ? 1 : 0;
  8. }


=> ca compile

Code :
  1. inline int
  2. geiCmpTinyMosaic(
  3. tinyMosaicRec   *pRec1,
  4. tinyMosaicRec   *pRec2
  5. )
  6. {
  7. return dbIsIdEqual(pRec1->mosaicId, pRec2->mosaicId) ? 1 : 0;
  8. }


=> syntax error, empty declaration :??:
 
pourquoi j'obtiens ce resultat et comment resoudre le probleme ?

mood
Publicité
Posté le 07-02-2003 à 11:24:30  profilanswer
 

n°303811
Kristoph
Posté le 07-02-2003 à 11:52:16  profilanswer
 

Arrette le C et passe au C++. Comme ça le mot clef inline sera reconnu :D

n°303843
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-02-2003 à 12:29:34  profilanswer
 

Kristoph > "inline" est reconnu par des compilateurs C... récents !
 
joce > regarde donc la version de ton compilo, à mon avis une bonne mise à jour s'impose


---------------
J'ai un string dans l'array (Paris Hilton)
n°303845
*syl*
--> []
Posté le 07-02-2003 à 12:31:25  profilanswer
 

En C99, le inline est valide..
 
Si t'as gcc, force le C99 pour voir (-std=gnu99)

n°303849
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-02-2003 à 12:34:35  profilanswer
 

*Syl* a écrit :

En C99, le inline est valide..
 
Si t'as gcc, force le C99 pour voir (-std=gnu99)


à mon avis, le compilo de joce en est encore au C89 :d


---------------
J'ai un string dans l'array (Paris Hilton)
n°303869
Taz
bisounours-codeur
Posté le 07-02-2003 à 13:19:39  profilanswer
 

*Syl* a écrit :

En C99, le inline est valide..
 
Si t'as gcc, force le C99 pour voir (-std=gnu99)

:non: -std=c99  
depuis quand gnu fait il parti du commité iso  :D  
 
ça marche tres bien, ça fait la vie dure aux macros de musaran

n°303876
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 13:26:01  profilanswer
 

Kristoph a écrit :

Arrette le C et passe au C++. Comme ça le mot clef inline sera reconnu :D

desole, je peux pas me permettre de passer en C++ sur un projet comme ca :D

n°303879
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 13:28:05  profilanswer
 

*Syl* a écrit :

En C99, le inline est valide..
 
Si t'as gcc, force le C99 pour voir (-std=gnu99)

c'est un compilo sous solaris :
 
cc -V
cc: WorkShop Compilers 5.0 98/12/15 C 5.0

n°303882
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 13:28:42  profilanswer
 

Harkonnen a écrit :


à mon avis, le compilo de joce en est encore au C89 :d

c'est pas le mien c'est celui de la boite :o

n°303889
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-02-2003 à 13:32:49  profilanswer
 

joce a écrit :

cc: WorkShop Compilers 5.0 98/12/15 C 5.0
 


[:meganne]


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 07-02-2003 à 13:32:49  profilanswer
 

n°303892
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 13:34:39  profilanswer
 

j'y peux rien [:spamafote]

n°303895
Lolo-
Posté le 07-02-2003 à 13:37:40  profilanswer
 

il sert a koi le inline la ? (en C je veux dire)


Message édité par Lolo- le 07-02-2003 à 13:38:04
n°303900
*syl*
--> []
Posté le 07-02-2003 à 13:40:05  profilanswer
 

++Taz a écrit :

:non: -std=c99  
depuis quand gnu fait il parti du commité iso  :D  
 
ça marche tres bien, ça fait la vie dure aux macros de musaran

Ouep, c'est vrai, mais p't'être qu'il veut les extensions gnu en sus du C99 :whistle:

n°303908
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-02-2003 à 13:42:38  profilanswer
 

Lolo- a écrit :

il sert a koi le inline la ? (en C je veux dire)


à inclure le corps de la fonction dans l'éxécutable compilé à chaque appel.
 
ça évite un "call" et un "ret" en assembleur, et tu dois gagner 2-3 cycles à chaque fois :d
 
par contre, pour peu que tu y fasses appel souvent, ça gonfle l'éxécutable final


---------------
J'ai un string dans l'array (Paris Hilton)
n°303936
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 13:59:26  profilanswer
 

Harkonnen a écrit :


à inclure le corps de la fonction dans l'éxécutable compilé à chaque appel.
 
ça évite un "call" et un "ret" en assembleur, et tu dois gagner 2-3 cycles à chaque fois :d
 
par contre, pour peu que tu y fasses appel souvent, ça gonfle l'éxécutable final


ouais mais quand la fonction est appelee 12 millions de fois ca commence a jouer

n°303937
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-02-2003 à 14:02:27  profilanswer
 

joce a écrit :


ouais mais quand la fonction est appelee 12 millions de fois ca commence a jouer


tout dépend effectivement du nombre de fois ou tu appelles la fonction, mais dans ce cas, pour peu que ta fonction soit assez conséquente, tu risques quand meme d'avoir un exécutable XXL  :sweat:


---------------
J'ai un string dans l'array (Paris Hilton)
n°303938
*syl*
--> []
Posté le 07-02-2003 à 14:02:32  profilanswer
 

Bah si ton compilo accepte pas le inline, tu peux remplacer ta fonction par une macro..

n°303941
Taz
bisounours-codeur
Posté le 07-02-2003 à 14:05:53  profilanswer
 

*Syl* a écrit :

Bah si ton compilo accepte pas le inline, tu peux remplacer ta fonction par une macro..

:o  
 
plus sérieusement du ferais peut etre bien de te pencher sur la doc de ton compilo pour connaitre ses options d'optimisations ou peut etre essayer de rentrer tes boucles dans tes fonctions pour eviter les sauts

n°303943
*syl*
--> []
Posté le 07-02-2003 à 14:08:23  profilanswer
 

Ça m'aurait étonné.. :)
 
Pkoi c'est mal ?

n°303947
Taz
bisounours-codeur
Posté le 07-02-2003 à 14:14:24  profilanswer
 

par ce que ça multiplie les risques d'effet de bord. et pis si la programmation était aussi simple que du search&replace, ça se saurait.

n°303950
*syl*
--> []
Posté le 07-02-2003 à 14:16:40  profilanswer
 

Wé j'suis d'accord mais quand t'écris une macro, généralement tu fais gaffe à ça donc si son compilo accepte pas le inline, j'pense que c'est la meilleure des solutions..


Message édité par *syl* le 07-02-2003 à 14:17:00
n°303951
Kristoph
Posté le 07-02-2003 à 14:17:47  profilanswer
 

joce a écrit :

desole, je peux pas me permettre de passer en C++ sur un projet comme ca :D


 
Et alors, le code C est sensé être compilable tel quel ou presque par un compilateur C++. C'est tout ce que je suggerais.
 
De toute façon, c'est soit ça, soit changer de compilateur C, soit les macros ...

n°303952
Taz
bisounours-codeur
Posté le 07-02-2003 à 14:18:40  profilanswer
 

ben si joce à fait une fonction et pas une macro, c'est justement parce que sont traitement est sans doute un peu trop "gros" pour une simple macro

n°303953
*syl*
--> []
Posté le 07-02-2003 à 14:21:06  profilanswer
 

Si c'est la fonction qu'il a mis en haut, c'est pas la mort de la mettre dans une macro.. C'est clair que si t'as une macro qui commence à faire une 10ène de lignes ou +, ça craint..


Message édité par *syl* le 07-02-2003 à 14:21:41
n°303956
Taz
bisounours-codeur
Posté le 07-02-2003 à 14:25:29  profilanswer
 

tout en effet. je serais curieux de voir ce que dbIsIdEqual, par ce que l'opérateur ternaire de geiCmpTinyMosaic est assez couteux et sans doute inutile (moi j'ai l'impression de lire if(true) return true else return false)
 
edit: on est bien d'accord, static n'est pas le contraire d'inline


Message édité par Taz le 07-02-2003 à 14:26:04
n°303979
Lolo-
Posté le 07-02-2003 à 14:52:01  profilanswer
 

me semblait que les fonctions étaient pas "inlinées" par les compilo si elles contiennent une boucle ou un test
on m'aurait menti ?

n°303980
Taz
bisounours-codeur
Posté le 07-02-2003 à 14:53:25  profilanswer
 

Lolo- a écrit :

me semblait que les fonctions étaient pas "inlinées" par les compilo si elles contiennent une boucle ou un test
on m'aurait menti ?

oui: tout ça depend du compilo, du niveau d'optimisation, de la prise en compte ou pas des directives de l'utilisateur (inline ne garantit rien, c'est just epour inciter le compilo: il peut tres bien inliner une fonctions pas inline et vice versa)

n°304021
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 16:09:35  profilanswer
 

je viens de regarder a quoi correspond dbIsIdEqual :
 
#define dbIsIdEqual(id1, id2) (id1 == id2)
 
:D

n°304029
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 16:20:52  profilanswer
 

++Taz a écrit :

ben si joce à fait une fonction et pas une macro, c'est justement parce que sont traitement est sans doute un peu trop "gros" pour une simple macro

c'est pas moi est fait la macro, mais l'appel de la fonction est apparement faite dans une macro.

n°304066
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-02-2003 à 17:20:36  profilanswer
 

joce a écrit :

c'est pas moi est fait la macro, mais l'appel de la fonction est apparement faite dans une macro.


ben il ne te reste plus qu'a utiliser un compilo c++ pour compiler ton code C, comme le suggère Krystoph :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
n°304070
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 17:26:44  profilanswer
 

Harkonnen a écrit :


ben il ne te reste plus qu'a utiliser un compilo c++ pour compiler ton code C, comme le suggère Krystoph :jap:

c'est pas a moi de choisir les outils utilises pour compiler l'application

n°304075
Willyzekid
Posté le 07-02-2003 à 17:40:48  profilanswer
 

joce a écrit :

c'est un compilo sous solaris :
 
cc -V
cc: WorkShop Compilers 5.0 98/12/15 C 5.0
 


 
 
T'as plus qu'à l'écrire en assembleur [:matleflou]
 
Sinon Workshop supporte les inline avec -xinline=nom_de_la fonction...
 
Et puis faudrait voire à passer à la version 6.0 au moins :)


---------------
Horizon pas Net, reste à la buvette!!
n°304086
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 17:53:23  profilanswer
 

Willyzekid a écrit :


 
 
T'as plus qu'à l'écrire en assembleur [:matleflou]
 
Sinon Workshop supporte les inline avec -xinline=nom_de_la fonction...
 
Et puis faudrait voire à passer à la version 6.0 au moins :)

comme dit plus haut c'est pas moi qui decide [:spamafote]

n°304103
Taz
bisounours-codeur
Posté le 07-02-2003 à 18:18:16  profilanswer
 

joce a écrit :

je viens de regarder a quoi correspond dbIsIdEqual :
 
#define dbIsIdEqual(id1, id2) (id1 == id2)
 
:D

ben à ce moment la je ne vois pas trop l'interet du test. si tu dois le faire 12miyon de fois comme tu dis

n°304140
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 19:20:49  profilanswer
 

++Taz a écrit :

ben à ce moment la je ne vois pas trop l'interet du test. si tu dois le faire 12miyon de fois comme tu dis

moi non plus
mais j'ai l'impression qu'il y a l'utilisation d'un pointeur sur la fonction au niveau de la macro qui utilise cette fonction.

n°304145
Taz
bisounours-codeur
Posté le 07-02-2003 à 19:24:40  profilanswer
 

Citation :

#define dbIsIdEqual(id1, id2) (id1 == id2)

je croyais que les macro permettient une ecriture plus courte?
 
 
 
plus sérieusement, si tu es bloqué sur cette fonction, il a surement d'autre moyen d'accélerer ton traitement. il dit quoi ton profiler?

n°304240
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 21:43:28  profilanswer
 

++Taz a écrit :

Citation :

#define dbIsIdEqual(id1, id2) (id1 == id2)

je croyais que les macro permettient une ecriture plus courte?
 
 
 
plus sérieusement, si tu es bloqué sur cette fonction, il a surement d'autre moyen d'accélerer ton traitement. il dit quoi ton profiler?

ch'uis pas bloqué, mais à la base je me demandais pkoi il jetait mon inline :)

n°304260
bjone
Insert booze to continue
Posté le 07-02-2003 à 22:10:13  profilanswer
 

de toutes façon si c'est un bon compilo, il fera des inlines automatiques suivant certains critères (appel unique ou faible de la fonction, etc...)

n°304274
joce
Architecte / Développeur principal
"BugHunter"
Posté le 07-02-2003 à 22:17:25  profilanswer
 

BJOne a écrit :

de toutes façon si c'est un bon compilo, il fera des inlines automatiques suivant certains critères (appel unique ou faible de la fonction, etc...)

tient d'ailleurs en parlant de ca, j'ai rencontré un cas trop bizarre en C++ avec le compilo sur solaris : en virant un inline j'ai gagné 10% de perf sur l'application.
Le nm montrait plein de WEAK sur la fonction en question (apparement parce que la fonction inlinée comportait des variables statiques - je précise que c'est pas moi qui ait inliné la fonction :D - ).  
Une idée de la raison d'un tel comportement ?

n°304303
Kristoph
Posté le 07-02-2003 à 22:53:17  profilanswer
 

Je sais que l'inline peut faire perdre des perfs quand ça cause des cache miss sur le code.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  inline en C

 

Sujets relatifs
Plus de sujets relatifs à : inline en C


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)