1

j'aimerais faire un pointeur vers une fonction mais cette fonction prend des arguments? comment mettre ca dans le pointeur?
char start(char *);
je met ca mais TIGCC renvoie Field start declared as a function.
avatar
Wenn ich morgen meinem Gott gegenübertrete, kann ich ihm sagen: "Ich bin unschuldig, ich hab' niemandem etwas getan - außer mir selben" Und das verzeiht er mir offentlich !
Falco - Hans Hölzel 1957 - 1998
RIP

2

tu dois déclarer ton pointeur de fonction comme ca :
char (*start)(char*);
car c'est un pointeur vers un truc qui renvoit un char

et tu n'es même pas obligé de déclarer les types des arguments du pointeur de fonction je crois
char (*start)(); devrait suffire
avatar

3

-

4

Nu :
et tu n'es même pas obligé de déclarer les types des arguments du pointeur de fonction je crois
char (*start)(); devrait suffire

C'est une très mauvaise idée... Si tu ne mets pas les paramètres, le compilateur va essayer de les deviner au point d'appel, et si tu oublies des transtypages -> plantage!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

Orion_ :
en parlant de pointeur, quelqu'un c pourquoi tigcc me sort un: error: invalid type argument of `unary *'
avec ça: unsigned int a; a=*(0x42); neutral

Tu ne peux pas déréférencer un entier, il faut écrire a=*(unsigned int*)0x42;.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

KK > oui tu as raison

mais en voulant repondre à ce topic j'ai fait des tests, et je comprend pas pkoi
#include <tigcclib.h>

int _main()
{
 void (* p)(const char *,...);
 p = printf; /* warning incompatible pointers types */
 (*p)("pouet");
 ngetchx();
 return 0;
}


me donne un warning alors que le prototype de printfe st bien
void printf (const char *format, ...);
avatar

7

Parce que tu ne dis pas que c'est du stkparm...

KK> unsigned int *, plutôt ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

8

Euh, oui, je ne sais pas d'où j'ai sorti mon char...
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

je n'avais pas pensé à ca
avatar

10

thx
avatar
Wenn ich morgen meinem Gott gegenübertrete, kann ich ihm sagen: "Ich bin unschuldig, ich hab' niemandem etwas getan - außer mir selben" Und das verzeiht er mir offentlich !
Falco - Hans Hölzel 1957 - 1998
RIP

11

Pollux :
Parce que tu ne dis pas que c'est du stkparm...

qu'est ce que c'est ?
NTW !!!!!

12

c'est un attribut de la fonction qui dit que ses parametres lui seront passé par la pile
(et non par des registres comme avec regparm)
(regarde __attribute__dans la doc de tigcc)
avatar

13

De toute façon, c'est la convention par défaut. (Mais ça peut se changer par des paramètres en ligne de commande.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

14

un pointeur de fonction ou une fonction est stkparm par defaut ?
(les romcalls sont bien stkparm aussi ?)
avatar

15

Nu
: un pointeur de fonction ou une fonction est stkparm par defaut ?

Oui, sauf si tu utilises le paramètre -mregparm (ou -mregparm=nombre).
(les romcalls sont bien stkparm aussi ?)

Oui.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

16

donc quand je demandais :
Nu :
KK > oui tu as raison

mais en voulant repondre à ce topic j'ai fait des tests, et je comprend pas pkoi
#include <tigcclib.h>

int _main()
{
 void (* p)(const char *,...);
 p = printf; /* warning incompatible pointers types */
 (*p)("pouet");
 ngetchx();
 return 0;
}


me donne un warning alors que le prototype de printf est bien
void printf (const char *format, ...);


ce n'est pas parceque je ne précise pas stkparm comme me l'avait suggéré pollux ?
avatar

17

Si. Les fonctions sont stkparm par défaut, mais tu as quand-même un warning si tu prends une fonction avec __attribute__((stkparm)) et tu la mets dans un pointeur sans cet attribut, parce que si tu compiles avec -mregparm, tu auras un problème si tu fais ça.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

18

Et en stkparm, le code est bien plus gros ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

19

Oui, -mregparm est une manière intéressante d'optimiser un programme. Expérimentez avec différentes valeurs pour n dans -mregparm=n.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

20

pourquoi ca marche pas ca ?
__attribute__((stkparm)) void add_(void) {}
void _main(void)
{
__attribute__((stkparm)) void (*add)(void);
 add= add_;
}
euh...

21

comment ça ça marche pas ?
ça retourne une erreur à la compilation?
ça plante ?
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

22

ah pardon je croyais l'avoir marqué...

deja tigcc refile un warning (le meme que celui de nu) et si je fais ceci :
void add_(void)
{
	ngetchx();
}
void _main(void)
{
clrscr();
__attribute__((stkparm)) void (*add)(void); 
 add= add_; 
(*add)();
}

ca plante de temps en temps
euh...

23

sur 40 essai ca a planté 3 fois
euh...

24

ah non, c'etait du a un autre probleme en fait ... (enfin je crois.)

sinon quelle la syntaxe pour declarer un tableau de pointeur de fonction (toutes ressemblant à void function(void))?
euh...

25

Le mieux c'est encore de faire un typedef si tu manipules bcp de pointeurs sur fonction identiques.

26

bidoo: vire ça : __attribute__((stkparm))
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

27

Essaye void (__attribute__((stkparm))*add)(void); ou void (*__attribute__((stkparm))add)(void);. (Je ne sais plus lequel c'est, mais un des 2 devrait être bon.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

28

je crois que c le premier...

bidoo> là tu fais un pointeur stkparm à partir d'une fonction qui n'est pas stkparm, c très mauvais... si ton pointeur n'est là que pour être utilisé en interne, n'utilise pas du tt de stkparm, sinon mets aussi un stkparm dans la déclaration...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

29

pollux >> oui en fait je l'avais mis : ds mon copier coller j'ai pas pris la ligne au dessus de add_(void).

kevin >> aucune des syntaxes ne fonctionne, mais ce n'est pas grave, apres de nbreux essai je n'ai pas eu de probleme.

spectras >> tu as tutafé raison, j'avais pas pensé a ca ..


mci pour tout
euh...

30

l'attribute ne sert pas si tu fait la fonction toi meme neutral
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.