3840

Pas moi-même, mais j'ai un proche qui adore l'aéromodélisme donc j'en entends régulièrement parler, et je participe de temps en temps. La phrase est très bien dite en tout cas... audiophile de l'accumulateur cheeky
avatar

3841

Godzil (./3830) :
Ho les piles faites pour l'aeromodelisme... des bombes sous hélices smile.gif?11

Ce sont des batteries qui alimentent les pistolets à billes airsoft AEG (Automatic Electronic Gun).

Avantage: rechargeables et d'une meilleure autonomie que les cartouches CO2 et le gaz.

Inconvénient: ça se contente de propulser les billes sans donner de recul dans l'arme (blowback). Aucune sensation.
avatar
Spartine, la fille que ce soir elle dîne en enfer: http://www.spartine.com

Pockett Videogames, le site de toutes les consoles portables!: http://www.pockett.net

J'aime beaucoup faire des dessins aux petites filles! C'est ma passion.

3842

Folco (./3839) :
J'ignorais, en tout cas j'ai jamais vu. Et en compet, c'est chaque élément d'un accu qui est controlé indépendamment pendant la charge grin

palouf -> tu donnes dans le modélisme toi aussi ?

Il FAUT les charger en surveillant la tension de chaque element, sinon c'est gros soucis en vue...
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.

3843

Pourquoi faut-il mettre des void dans les listes d'arguments vides des protos en C ?

3844

parce que "rien" c'est reserve pour la vieille syntaxe:

int add()
int a;
int b;
{return a+b;}

3845

Si tu veux dire "pourquoi utiliser fonction(void) plutôt que fonction()", c'est parce que fonction() est gardé uniquement pour la compatibilité avec les premières versions du C, et que dans ce cas le compilo ne vérifie pas ce que tu passes en argument.

return 0; }
Par exemple, void truc()
{
}

int main(int argc, char *argv[])
{
    truc(42, "toto");
  
ne génère pas de warning.

EDIT : cross.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3846

Merci ! Maintenant que j'ai le pourquoi du comment, j'éviterai de vérifier dans mon bouquin si c'est en C ou en C++ qu'il faut spécifier ce foutu void grin

3847

3848

argh, je crois que non mon général grin
Dans mon bouquin de C++, j'ai une annexe A qui répertorie les différences entre C et C++, et qui dit, "en C, il faut spécifier void dans les listes d'argument vides". J'en conclus qu'en C++ faut pas, non ? ^^

Puis j'aime toujours autant le C :
/home/folco/fpgc/src/Button.c:108:43: note: expected ‘struct BUTTON *’ but argument is of type ‘struct BUTTON *’ trilove

3849

oh je veux le source qui produit cette erreur trilove

(sapu le c++)

3850

./3844 ./3845 => c'est génial ce truc, ça permet de soécifier une liste vide, et en fait de passer quand même un argument.
Parfait quand on a un truc de ce genre :
struct machin;

typedef void (*callback) ();

typedef struct {
    int a;
    callback cb;
} machin;

...

void cb (struct machin* chose)
{
    ...
}

Si, dans mon typedef de callback, je définis 'struct machin* chose', en utilisant donc une déclaration anticipée, j'obtiens le foutu warning du ./3848, alors que ce que je fais semble on ne peut plus valide. gcc s'y paume. La solution consiste donc à ne rien déclarer dans le typedef et le proto de la callback, ni void ni le moindre argument, et à pourtant en utiliser dans l'implémentation : ça passe silencieusement, même si c'esr crade, en soi.

3851

squalyl (./3849) :
oh je veux le source qui produit cette erreur trilove

(sapu le c++)

Cross. J'essaye de faire un test case, parce que c'est rigolo comme truc. ^^

3852

Euh, y'a un problème dans ton exemple non ? struct machin* chose, sachant que machin est défini comme struct { ... }, ça donne struct struct { ...} * chose, donc un struct en trop ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3853

epA8

Féchier le test case. Dans un seul fichier, ça aurait l'air de passer, en tout cas je dois rater un truc. Voici un screen pour montrer ce que ça donne. Le header déclarant cette fameuse structure BUTTON :
Button.h
#ifndef BUTTON_H #define BUTTON_H #include <stdbool.h> #include <SDL2/SDL.h> #include "ContextHelp.h" #define BUTTON_ENABLED true #define BUTTON_DISABLED false struct BUTTON; typedef bool (*button_MouseIn)(struct BUTTON* button); typedef bool (*button_MouseOut)(struct BUTTON* button); typedef bool (*button_LeftClick)(struct BUTTON* button); typedef struct { SDL_Texture* SprEnabled; // Cannot be NULL SDL_Texture* SprDisabled; // May be NULL SDL_Texture* SprClicked; // May be NULL // button_MouseIn in; // May be NULL button_MouseOut out; // May be NULL button_LeftClick leftclick; // Cannot be NULL. Will be triggered on clic // bool enabled; // Button is not affected by the mouse if enabled is false /* * Internal */ int mouse_status; // Status of the mouse over the button SDL_Rect dest; // Destination location and size of the button SDL_Texture* sprite; // The sprite currently used CONTEXT_HELP* context; // Current help context SDL_Texture* help; // The texture given to the context help handler } BUTTON; #define STATUS_MOUSE_OUT 0 #define STATUS_MOUSE_IN 1 #define STATUS_CLICK_LEFT_DOWN 2 #define STATUS_CLICK_LEFT_UP 3 bool ButtonInit (struct BUTTON* button, char* SprEnabled, char* SprDisabled, char* SprClicked, int x, int y, bool enabled, button_MouseIn in, button_MouseOut out, button_LeftClick leftclick, char* help, CONTEXT_HELP* context); void ButtonClose (struct BUTTON* button); bool ButtonUpdate (BUTTON* button, SDL_Event* event, int mouse_x, int mouse_y); bool ButtonDraw (struct BUTTON* button); #endif // BUTTON_H


cross -> non, j'ai une autre erreur sans ce struct.

3854

t'as des struct en trop devant tes BUTTON, vu que t'as fait un typedef ^^

3855

Oui mais non, j'ai malheureusement c/c le header avec des modifs en cours, j'en fais 50/minute depuis 1/2 heure. Le "véritable header", c'est ça :
header
#ifndef BUTTON_H #define BUTTON_H #include <stdbool.h> #include <SDL2/SDL.h> #include "ContextHelp.h" #define BUTTON_ENABLED true #define BUTTON_DISABLED false struct BUTTON; typedef bool (*button_MouseIn)(struct BUTTON* button); typedef bool (*button_MouseOut)(struct BUTTON* button); typedef bool (*button_LeftClick)(struct BUTTON* button); typedef struct { SDL_Texture* SprEnabled; // Cannot be NULL SDL_Texture* SprDisabled; // May be NULL SDL_Texture* SprClicked; // May be NULL // button_MouseIn in; // May be NULL button_MouseOut out; // May be NULL button_LeftClick leftclick; // Cannot be NULL. Will be triggered on clic // bool enabled; // Button is not affected by the mouse if enabled is false /* * Internal */ int mouse_status; // Status of the mouse over the button SDL_Rect dest; // Destination location and size of the button SDL_Texture* sprite; // The sprite currently used CONTEXT_HELP* context; // Current help context SDL_Texture* help; // The texture given to the context help handler } BUTTON; #define STATUS_MOUSE_OUT 0 #define STATUS_MOUSE_IN 1 #define STATUS_CLICK_LEFT_DOWN 2 #define STATUS_CLICK_LEFT_UP 3 bool ButtonInit (BUTTON* button, char* SprEnabled, char* SprDisabled, char* SprClicked, int x, int y, bool enabled, button_MouseIn in, button_MouseOut out, button_LeftClick leftclick, char* help, CONTEXT_HELP* context); void ButtonClose (BUTTON* button); bool ButtonUpdate (BUTTON* button, SDL_Event* event, int mouse_x, int mouse_y); bool ButtonDraw (BUTTON* button); #endif // BUTTON_H

Et là tu peux vérifier, pas de struct intempestif qui traine.

Et voici un test case :struct struct_t; typedef void (*callback_t) (struct struct_t* arg); typedef struct { callback_t cb; } struct_t; void cb (struct_t* arg) { (void) arg; } int main (void) { struct_t s; s.cb (&s); return 0; }
$ gcc -W -Wall test.c -o test
test.c: In function ‘main’:
test.c:20:9: warning: passing argument 1 of ‘s.cb’ from incompatible pointer type
   s.cb (&s);
         ^
test.c:20:9: note: expected ‘struct struct_t *’ but argument is of type ‘struct struct_t *’

Peut-être que je me plante en grand, mais je suis très preneur d'une solution...

3856

grx@grxmint ~ $ gcc wut.c
wut.c: In function ‘main’:
wut.c:18:3: warning: passing argument 1 of ‘s.cb’ from incompatible pointer type [enabled by default]
   s.cb (&s);
   ^
wut.c:18:3: note: expected ‘struct struct_t *’ but argument is of type ‘struct struct_t *’
ah oui grin

bon je finis mon coup de fil, puis je regarde ^^

3857

squalyl (./3856) :
bon je finis mon coup de fil, puis je regarde ^^

gni

3858

(trigni)

edit: trouve, c'est ton typedef qui est mal ecrit. T'as typedeffe une struct sans tag. Il faut ecrire:

struct struct_t; // ici tu definis le type A
 
typedef void (*callback_t) (struct struct_t* arg); //ici tu utilises le type A
 
typedef struct struct_t
{
  callback_t cb;
} struct_t; // ici tu definis un type B
 
void cb (struct_t* arg) //ici tu utilises le type B
{
  (void) arg;
}
 
int main (void)
{
  struct_t s; // type B
  s.cb (&s); // mais le cb attend un type A donc PAN
  return 0;
}


c'est necessaire, pour que le "struct struct_t" initial utilise dans les types callback fasse reference au meme type que tu redefinis dans ton typedef suivant les declarations de callbacks.

mais le message de gcc est moisi, si tu veux une bonne analyse de code, prends clang.

3859

ah, super merci, il me semblait bien que c'était une vacherie de ce genre smile
je me disais bien qu'il voyais deux choses différentes, mais ne savais pas le dire, d'où le message d'erreur à la con. On va faire un nouveau jeu : faire générer le message d'erreur le plus farfelu possible, et trouver pourquoi ça déconne grin

3860

grx@grxmint ~ $ clang wut.c
wut.c:18:9: warning: incompatible pointer types passing 'struct_t *' to parameter of type 'struct struct_t *' [-Wincompatible-pointer-types]
  s.cb (&s);
        ^~
1 warning generated.

Et voila ^^

3861

Bien joué, j'ai pas pensé à faire ça. smile

3862

Je plussoie la suggestion. Quand on a des warnings bizarres, utiliser un autre compilo peut aider.
Clang a mis un coup de pied aux fesses de GCC sur plusieurs points, et les warnings de GCC sont maintenant nettement meilleurs qu'avant que Clang devienne un concurrent suffisamment sérieux. GCC 5.0 utilisera même (conditionnellement) les escape sequences ANSI pour faire des messages d'erreur colorés, standard sur Clang depuis des années.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

3863

C'est une bonne chose
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.

3864

Mini clavier Bluetooth acheté sur le net, pour taper de petits textes avec ma tablette Windows (le clavier virtuel ça va un temps, mais pour yAroner c'est insupportable):
spL4

Avantage: la zone droite est tactile et peut servir soit de pavé numérique soit de touchpad (plus précis que le tactile, surtout pour pointer des petites icônes).
Inconvénient: n'existe pas en AZERTY (ou peut-être que oui, mais trop cher).

Le même clavier après avoir collé dessus une planche de stickers:
Q2IE

Avantage: il est AZERTY, et ça m'a coûté que 3€ cheeky J'ai juste du changer les paramètres du clavier dans Windows.
Inconvénient: ça m'a pris du temps, il a fallu recouper les stickers (ils étaient prévus pour un clavier classique, plus grand) et la police de caractère des chiffres est laide.

On verra à l'usure, mais le vinyle a l'air de qualité et l'impression correcte. La dernière fois que j'avais fait ça c'était sur un clavier de laptop américain, et la machine est morte avant que les stickers ne soient usés cheeky

(EDIT: taille des photos)
avatar
Spartine, la fille que ce soir elle dîne en enfer: http://www.spartine.com

Pockett Videogames, le site de toutes les consoles portables!: http://www.pockett.net

J'aime beaucoup faire des dessins aux petites filles! C'est ma passion.

3865

Clavier multi-tablettes en plus, il a l'air sympa.
avatar
"- Nigga you know what the fuck I want, nigga: I want your motherfuckin' Daytons, and your motherfuckin' stereo! And I'll take a double burger with cheese!
- WHUT?"
I LOVE TO HATE/I HATE YOUR LOVE -AND I CAN'T FEEL AFFECTION FOR PEOPLE LIKE YOU!
CAALGOOONNNNN [TELLMESOMETHINGIDONTKNOW SHOWMESOMETHINGICANTUSE PUSHTHEBUTTONS CONNECTTHEGODDAMNDOTS] (Si Dieu existe il doit me détester...)

3866

Dans l'absolu j'aurais voulu un AZEERTY belge, mais tant pis je me contenterai d'un clavier FR cheeky

ça va plutôt bien, à l'usage il me rappelle feu mon eee PC. C'était une chouette bébête. Ici je me contente de poser le clavier devant ma tablette qui tient avec un support vertical, ça fait illusion que je possède un netbook cheeky
avatar
Spartine, la fille que ce soir elle dîne en enfer: http://www.spartine.com

Pockett Videogames, le site de toutes les consoles portables!: http://www.pockett.net

J'aime beaucoup faire des dessins aux petites filles! C'est ma passion.

3867

Génial ces planches de stickers, c'est qu'il me faudrait pour mon clavier belge (je déconne pas grin) c'est où les planches de qualité qui ne vont pas me ruiner stp ? smile

3868

Nhut (./3866) :
Dans l'absolu j'aurais voulu un AZEERTY belge, mais tant pis je me contenterai d'un clavier FR cheeky.gif?12

La version française y'a qu'un seul E, c'est bien ça winktongue
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

3869

Oh pardon, je voulais dire AZE€RTY tongue
Folco (./3867) :
c'est où les planches de qualité qui ne vont pas me ruiner stp ? smile.gif?12

Sur ebay, un revendeur américain. J'ai cherché en international et j'ai pris le moins cher en achat immédiat grin (arrivé en seulement une semaine)
avatar
Spartine, la fille que ce soir elle dîne en enfer: http://www.spartine.com

Pockett Videogames, le site de toutes les consoles portables!: http://www.pockett.net

J'aime beaucoup faire des dessins aux petites filles! C'est ma passion.

3870

Erf, c'est pas une référence ça, bon je vais chercher de mon côté, mais merci bien du tuyal, je savais pas que ça existait ^^