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

Ça se fait, ça ?

58 réponses
Avatar
Pierre Maurette
Bonjour,

Je sens que mon prochain message sera un "Oooops !" ;-)

Est-il envisageable de faire ça:

[main.c]
#include<stdio.h>

/* declare & define
* void func1(int* tab);
* void func2(int* tab)
*/
#define PETRUS1
#include "testfunc.c"
#undef PETRUS1
#define PETRUS2
#include "testfunc.c"
#undef PETRUS2

int main(void)
{
int tabtest[]= {1, 2, 3};
func1(tabtest);
func2(tabtest);
return 0;
}

[testfunc.c]
#ifdef PETRUS1
void func1(int* tab)
#endif
#ifdef PETRUS2
void func2(int* tab)
#endif
{
printf("%d\n", tab[0]);
#ifdef PETRUS1
printf("%d\n", tab[1]);
#endif
}

Le but est de centraliser le code source en évitant quelques boucles
(ou plus généralement des tests) mal placées. Il est clair que je
n'utiliserai un truc tordu comme ça uniquement si les performances le
justifient. En revanche, je ne veux pas dupliquer le code source.

En regardant ce que VC8 générait, il m'a semblé constater que sur des
fonctions de cette forme (mais plus complexes):

void func(int* tab, int commutateur)
{
printf("%d\n", tab[0]);
if(commutateur)printf("%d\n", tab[1]);
/* etc. */
}

avec les bonnes options d'optimisation, il pouvait générer deux
fonctions, ou au moins deux blocs avec duplication de certaines parties
du code.

Bonne fin de journée...

--
Pierre Maurette

8 réponses

2 3 4 5 6
Avatar
Laurent Deniau
Gabriel Dos Reis wrote:
Harpo writes:

| On Tue, 19 Jun 2007 11:44:44 +0000, Marc Boyer wrote:
|
| > Mais, si c'est possible, je préfère pour ma part utiliser des
| > moulinettes autres que cpp.
|
| Pensez-vous que ce puisse être intéressant d'écrire un pré-processeur
| puissant pour le C ?

Je ne sais pas. Mais les inventeurs du C ont invente m4.


Je croyait (de memoire) que m4 avait ete developpe pour Fortran?

a+, ld.

Avatar
Laurent Deniau
Harpo wrote:
On Tue, 19 Jun 2007 11:44:44 +0000, Marc Boyer wrote:

Mais, si c'est possible, je préfère pour ma part utiliser des
moulinettes autres que cpp.


Pensez-vous que ce puisse être intéressant d'écrire un pré-processeur
puissant pour le C ?


Ca depend de ce que tu veux faire. Pour tout ce qui est hors typage, cpp
est deja puissant, mais souvent mal maitrise. Tu peux regarder Chaos (de
Paul Mensonide le guru de cpp) sur sourceforge pour voir ce qu'on peut
faire avec cpp, c'est edifiant. COS utilise aussi exclusivement cpp pour
generer son code et cela contient pleins de boucles (MAP, MAP2, FOLDR,
etc) sur les arguments des macros. Si tu veux qqchose d'avantage oriente
pre-compilateur, il y a deja "eXtensible C" qui existe:

http://cs.nyu.edu/rgrimm/xtc/

Je ne l'ai jamais teste mais l'approche est interessante a mon avis.

Le probleme avec les preprocesseurs, c'est que le code devient
rapidement tres difficile a lire et a comprendre. Mais ils offrent une
flexibilite indispensable dans certains cas.

L'avantage avec les preprocesseurs, c'est que modifier les macros qui
generent le code est plus rapide que de modifier le compilateur.

a+, ld.


Avatar
Thierry B.
--{ Harpo a plopé ceci: }--

Je ne sais pas. Mais les inventeurs du C ont invente m4.


Je croyait (de memoire) que m4 avait ete developpe pour Fortran?


D'où son nom, M FO(u)R,


Mmmmm, tu es sur de toi, là ? Parce que je crois qu'il y a eu
un m1 ou m2 avant...

Il semble cependant que ce soient Kernigham et Ritchie qui aient
développé M4 : http://wolfram.schneider.org/bsd/7thEdManVol2/m4/m4.pdf


Et on parle de "frontend pour ratfor". et on trouve aussi ça:

The M4 macro processor is an extension of a
macro processor called M3 which was written by
D. M. Ritchie for the AP-3 minicomputer; M3
was in turn based on a macro processor imple-
mented for [1]. Readers unfamiliar with the basic

Donc non, le 4 de m4 n'a rien à voir avec le Fortran,
tout comme les cinq lettres de Forth.

Par contre, pour les curieux des pré-processeurs, je vous conseille
de lire l'histoire de ratfor, et eventuellement de l'essayer.
C'est assez étonnant...


--
L'attaque d'Usenet par UTF-8 (film à 22h30)



Avatar
Laurent Deniau
Harpo wrote:
On Wed, 27 Jun 2007 11:40:16 +0200, Laurent Deniau wrote:

Harpo wrote:

Pensez-vous que ce puisse être intéressant d'écrire un pré-processeur
puissant pour le C ?
Ca depend de ce que tu veux faire.



Pour l'instant je n'en sais rien. Quand j'ai appris le C j'ai été déçu
par le macro-processeur que j'ai trouvé en deça de celui que j'utilisais
en assembleur IBM.
MASM que proposait Pierre Maurette correspond à ses fonctionnalités de
manière plus structurée, il faudrait voir ce que cela fait mélangé
avec du C.

Pour tout ce qui est hors typage, cpp
est deja puissant, mais souvent mal maitrise. Tu peux regarder Chaos (de
Paul Mensonide le guru de cpp) sur sourceforge pour voir ce qu'on peut
faire avec cpp, c'est edifiant. COS utilise aussi exclusivement cpp pour
generer son code et cela contient pleins de boucles (MAP, MAP2, FOLDR,
etc) sur les arguments des macros.


Je veux bien te croire, le problème est que je suis un programmeur
'normal', j'ai essayé de faire des boucles avec cpp, d'utiliser la
récursion, ça marche bien, le problème c'est l'arrêt, je n'y suis
jamais arrivé et les solutions que j'ai imaginées étaient pour la
plupart trop tordues pour mériter d'être essayées.
Il faudrait quelque chose utilisable par un programmeur 'normal', pas
seulement par Laurent Deniau et quelques autres sur cette planète. Que ce
que tu proposes et qui utilise cpp soit très bon est une chose, que cpp
soit l'outil le meilleur pour faire ce genre de choses en est une autre.


Les macros de COS sont utilisables par un programmeur normal, du moins
j'ose l'esperer puisque j'en suis un (et encore, je pratique de moins en
moins). Le fait que defmethod soit un peu compliquee est une autre autre
(je suis d'ailleurs entrain de la simplifier a meme heures perdues).

Dans COS, les macros ne sont pas reentrantes ce qui simplifie grandement
leur programmation et leur utilisation (leur comprehension) mais limite
beaucoup leurs utilisations conjointes qui doivent systematiquement etre
organisees en "poupees-russes". Dans Chaos, par contre, la recursion est
quasi illimite (limitee a 64 dans COS) et les algos peuvent etre
utilises conjointement, notament pour construire d'autres algos de
complexite superieure O(n) x O(n) -> O(n^2) ce qui n'est pas (ou tres
rarement) possible avec les macros de COS. Par contre je suis d'accord
qu'utiliser Chaos demande de bien comprendre cpp. Comme d'hab, ce qu'on
ne comprend pas par ignorance est toujours complique, et quand on s'y
interesse, ca se simplifie. Donc il n'y a pas de raison que tout ceux
qui veulent s'y interesser n'y arrive pas. Reste que pour utiliser COS,
il n'est nullement necessaire d'en comprendre les macros.

a+, ld.



Avatar
Antoine Leca
En news:f5tao9$gf4$,
Laurent Deniau va escriure:
Gabriel Dos Reis wrote:
Je ne sais pas. Mais les inventeurs du C ont invente m4.


Je croyait (de memoire) que m4 avait ete developpe pour Fortran?


Ce n'est pas incompatible. Ken Thomson et Dennis Ritchie pratiquaient aussi
Fortran (et à l'époque, cela n'était pas franchement un exploit ; en fait,
cela devait même être plutôt obligatoire pour eux, à en juger par les
efforts de K. Thomson pour f77).

Accessoirement, ils touchaient aussi leurs billes en assembleur :-) ; à la
différence (selon la préface du K&R) de Brian Kernighan.

Qui lui connaissait bien Pascal (et ne l'aimait pas.)


Bref, il n'y a pas qu'un seul langage de programmation dans la vie.


Antoine

PS: il y a bien des gens qui programment (aussi) en C++ :-D


Avatar
Stéphane Goujet
Le Thu, 28 Jun 2007 12:35:00 +0200
"Antoine Leca" a écrit:

PS: il y a bien des gens qui programment (aussi) en C++ :-D


D'accord tant que vous n'écrivez pas "il y a des gens biens qui
programment (aussi) en C++". :->

--
Stéphane Goujet.

Avatar
Pierre Maurette


[...] mais bon, je me trompes
souvent...


:-)

--
Pierre Maurette

Avatar
Marc Boyer
Le 28-06-2007, Stéphane Goujet a écrit :
Le Thu, 28 Jun 2007 12:35:00 +0200
"Antoine Leca" a écrit:

PS: il y a bien des gens qui programment (aussi) en C++ :-D


D'accord tant que vous n'écrivez pas "il y a des gens biens qui
programment (aussi) en C++". :->


Non, la vraie provocation eut été
"il y a des gens qui programment (mieux) en C++".

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)


2 3 4 5 6