J'ai vu le code suivant dans certains codes anciens :
size_t a = 1 ???- 2 :0;
Que signifie le symbole ???-
en C++ ? Comment dois-je le comprendre ?
J'ai vu le code suivant dans certains codes anciens :
size_t a = 1 ???- 2 :0;
Que signifie le symbole ???-
en C++ ? Comment dois-je le comprendre ?
En fait, c'est le cas :
size_t a = 1 ? ~2 :0;
??-
est un trigramme pour ~
Les trigraphes datent d'une époque ancienne... avant même que certains d'entre nous ne soient nés.
À l'époque, certains personnages n'étaient pas toujours pris en charge. Un programmeur non averti essayait de taper un tel caractère et se rendait compte qu'il n'existait pas sur le clavier !
Source de l'image : <a href="http://www.myoldmac.net/cgi-data/forum/phpBB2/viewtopic.php?t=305" rel="noreferrer">http://www.myoldmac.net/cgi-data/forum/phpBB2/viewtopic.php?t=305</a>
Les trigraphes ont donc été ajoutés pour permettre au programmeur d'accéder à la fonctionnalité de ces caractères lorsqu'ils n'existaient pas (soit dans l'encodage, soit au clavier).
Aujourd'hui, elles sont obsolètes et sont plus efficaces pour semer la confusion dans l'esprit du lecteur que pour contourner les anciennes normes.
Alors soit ce code est vraiment vieux, soit l'auteur était un imbécile.
J'ai vu la notification apparaître 10 millisecondes avant de cliquer et je n'ai rien pu faire :p
Je vote pour (b), l'auteur était un imbécile. a = 1 ? ~2 : 0
est obscurci à la main pour a = ~2
. L'opérateur trinaire n'est là que pour une seule raison : Pour obscurcir le code. L'ajout du trigraphe pour obscurcir le tilde n'est qu'une cerise sur le gâteau.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
7 votes
???
ne doit être utilisé que dans les commentaires :)1 votes
Il serait amusant d'inventer une fausse signification pour cet opérateur.
???-
pourrait être l'opérateur "Vraiment ??? Je suis choqué !", un opérateur de?
qui indique au compilateur que la première branche est rare, par exemple.12 votes
Mention obligatoire de l'opérateur WTF : ? ?!??!
0 votes
@Patashu Amusant pour vous. Frustration pour ceux qui lisent votre code :P
0 votes
@Mark Garcia Oui, ce ne serait qu'une blague, genre
-->
opérateur :)13 votes
Les trigraphes existent pour résoudre deux problèmes. Tout d'abord, certains systèmes embarqués ne prennent en charge qu'un jeu de caractères très limité et peuvent ne pas être en mesure d'afficher ou de saisir des caractères tels que "^" et "~". Deuxièmement, certains systèmes d'exploitation prennent en charge plusieurs pages de code qui ont des codages différents pour "~", "^", "|", etc. La seule façon de s'assurer que votre code prend en charge toutes les variations des pages de code est d'utiliser des trigraphes (je vous regarde, IBM EBCDIC !).
0 votes
@JamesAnderson, C'est marrant de voir que je continue à m'énerver devant un code qui suppose que A-Z est contigu, mais pas devant un code qui n'utilise pas de trigraphes, hein ?
6 votes
@JamesAnderson Systèmes embarqués ? Qu'est-ce que vous fumez ? Les trigraphes n'affectent pas la fonctionnalité du programme ou le système cible. Ils constituent en fait un codage de caractères pour les fichiers sources et une commodité pour les utilisateurs à qui il manque certaines touches sur leur clavier. IBM fait pression contre leur dépréciation parce que, soi-disant, cela lui permet d'éviter de forcer les utilisateurs de son ordinateur central à standardiser un encodage de texte EBCDIC. Mais un ordinateur central est tout le contraire d'un système embarqué.
0 votes
@Potatoswatter -- Je voulais dire que l'environnement de développement ne pouvait pas supporter ces caractères. De nos jours, la plupart du temps, la compilation croisée se fait à partir d'une machine "normale" plus grande, mais autrefois, il fallait souvent utiliser du matériel personnalisé.
0 votes
@chris -- ou "0" < "a", ou "2" - 30 donnera un entier de valeur 2.
0 votes
@MarkGarcia À deux pas de la
??/
qui se traduit par une barre oblique inverse, qui étend un commentaire à la ligne suivante0 votes
Cette question est posée environ une fois toutes les deux semaines, pourquoi n'a-t-elle pas encore été clôturée ?