Demat' iNal,
En regardant cette vidéo: https://www.youtube.com/watch?v=lkgszkPnV8g, j'ai découvert une de ces petites perles qui viennent rompre la monotonie d'un quotidien où l'on dérive constamment.
int(riguant);
Ce code C compile. C'est d'ailleurs aussi un code C++, qui compile également.
Mais pourquoi donc ?
# Pourquoi pas?
Posté par Guillaum (site web personnel) . Évalué à 10.
C'est une déclaration de variable, comme
int riguant
.Je dirais que la partie gauche accepte les parenthèses pour permettre de grouper les choses, comme par exemple entre
int *(foo[])
versusint (*foo)[])
.En C (et C++), on peut voir la déclaration de type comme deux parties. La gauche, le type primitif, et la droite, comme "une expression qui permet d’accéder à ce type".
Par exemple,
int *p;
signifie que*p
permet d’accéder à unint
. Donc p est un pointeur.En partant de là, si les parenthèses sont autorisées, pas de raison de les interdire dans le cas ou l'expression se réduit à un nom.
[^] # Re: Pourquoi pas?
Posté par AncalagonTotof . Évalué à 1. Dernière modification le 27 mars 2020 à 20:05.
J'ai cru à une erreur au début, mais non, c'est bien une déclaration.
Par contre, sans être Grand Gourou C/C++, j'ai tout de même découvert récemment une nouvelle forme de casting, et c'est ça qui m'a fait douter. Ça se passe comme ceci :
Avec comme résultat :
# C du plaisir
Posté par nico4nicolas . Évalué à 4.
C'est toujours marrant de voir les choses qu'on connait écrites (ou présentées) un peu différemment. Celui que je n'avais pas compris la première que je l'ai vu c'est :
a = b+++++c;
[^] # Re: C du plaisir
Posté par Graveen . Évalué à 2.
J'ai l'impression que ca ne compile pas sur https://www.onlinegdb.com/online_c_compiler ? :)
[^] # Re: C du plaisir
Posté par beaulieu1 . Évalué à 2.
a = b++ + ++c;
oua = (b++)+(++c);
devrait marcher.Si on attache tout, le lexer voit deux opérateurs ++ suivit d'un +.
[^] # Re: C du plaisir
Posté par beaulieu1 . Évalué à 1.
Comme il y a plusieurs manières d'accéder à un élément d'un tableau : pour int *t : t[5], 5[t] et *(t+5) désigne le même élément.
Ca me fait penser à l'entrée de Korn pour l'IOCCC de 1987 :
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
[^] # Re: C du plaisir
Posté par Colin Pitrat (site web personnel) . Évalué à 4.
Un autre que j'aime bien c'est l'opérateur flèche :
if (c = a --> b) {
…
}
# Bien sûr
Posté par harlock974 . Évalué à 3. Dernière modification le 28 mars 2020 à 04:48.
Bien sûr que ça compile. C est le Langage de Programmation de Dieu.
[^] # Re: Bien sûr
Posté par AlexTérieur . Évalué à 1.
Dieu compile le C ?
(qu'il me pardonne…)
[^] # Re: Bien sûr
Posté par Sébastien Rohaut . Évalué à 1.
N'importe quoi. Tout le monde sait que Dieu code en Python !
[^] # Re: Bien sûr
Posté par Clément V . Évalué à 5.
Non, Perl (source : https://xkcd.com/224/).
[^] # Re: Bien sûr
Posté par Pol' uX (site web personnel) . Évalué à 5.
Hum … qui est ce Dieu dont vous parlez ?
Adhérer à l'April, ça vous tente ?
[^] # Re: Bien sûr
Posté par beaulieu1 . Évalué à 0.
Sans doute celui que l'on a créé à notre image (très embellie alors). A moins que ce soit l'inverse.
[^] # Re: Bien sûr
Posté par jmiven . Évalué à 2.
Celui là je crois.
[^] # Re: Bien sûr
Posté par KiKouN . Évalué à 2.
Dieu a aussi ses pêchés.
J'espère que l'on ne la pas fait à notre image ou qu'il ne servent pas d'image à la nôtre.
[^] # Re: Bien sûr
Posté par Tonton Th (Mastodon) . Évalué à 6.
https://cs.stanford.edu/~knuth/
# C++ is hard
Posté par Victor STINNER (site web personnel) . Évalué à 2.
"Conclusion : C++ is hard" :-)
Bon, aussi :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.