34 votes

Qu'est-ce que les opérateurs C / \ et \ / font?

N'importe qui peut "déclarer" ceux propre des opérateurs en C.... c'est, si on est un compilateur C gourou et a le code source du compilateur C! ;-)

D'autres questions de puzzle:

  1. Comment ces opérations effectuées dans C99? gcc? ...
  2. Et pourquoi n'ont - / \ & \ / abandonné?
  3. Les types ont l' /\ et \/ opérateurs-elle valide?

Googler "/\ \/" naturellement ne retourne rien. Wikipedia a une page pour ni /\ ni \/. Mais j'ai repéré forme similaire opérateurs sont intégrés dans les entités de caractères XML!


La Source a ajouté:

J'ai trouvé le fautif exemple dans le PDP de la cc de la source du fichier "c00.c":

/*
 * Return the next symbol from the input.
 * peeksym is a pushed-back symbol, peekc is a pushed-back
 * character (after peeksym).
 * mosflg means that the next symbol, if an identifier,
 * is a member of structure or a structure tag or an enum tag
 */
symbol()
{
...
 case BSLASH:
  if (subseq('/', 0, 1))
   return(MAX);
  goto unkn;

 case DIVIDE:
  if (subseq('\\', 0, 1))
   return(MIN);
  if (subseq('*',1,0))
   return(DIVIDE);
...
}


Implémentations Réelles:

Le /\ et \/ opérateurs remontent à aussi loin que Sixième Édition Unix 1975 (à ce jour). Exemples: Unix V6(1975), Unix V7(1979) et plus actuellement BSD 2.11(1992-2008)

18voto

Tamas Czinege Points 49277

Ni / \ ni \ / ne sont définis comme des opérateurs dans la norme ISO C89, et je ne pense pas qu'ils aient jamais été définis dans une version antérieure. Et ils ne sont certainement pas définis dans C99 pour autant que je sache.

Voici un projet de norme ANSI C89, à titre de référence: http://flash-gordon.me.uk/ansi.c.txt

(Vous êtes probablement victime d'une étrange magie mystérieuse du préprocesseur)

14voto

Sinan Ünür Points 76179

\/ ressemble sup et /\ ressemble inf. Ils pourraient aussi être et , respectivement.

Je ne me souviens pas avoir déjà vu ces en K&R 2e édition ou de toute autre C livre.

10voto

Jonathan Leffler Points 299946

La spéculation!

Si vous avez des espaces autour d'eux, puis:

a /\ b   ===>   a / b

a \/ b   ===>   a / b

Logique: le pré-traitement de la phase a à traiter avec la barre oblique et d'un caractère après, et est tout à fait probable pour traiter les anti-slash-espace de l'espace, et de l'anti-slash-slash comme slash.

Cela dit, le SOLEIL compilateur C (version 12) et le compilateur GNU C (version 4.4) rejeter code contenant la barre oblique inverse. Mais j'ai pu facilement croire que les vieux, la pré-norme C préprocesseurs ont été moins prudent à ce sujet.

Le respect des normes

Les opérateurs n'ont jamais fait partie de la version officielle du C.

Aussi, la norme ne permettrait pas à l'interprétation que j'ai donné (section 5.1.1.2 Traduction phases, dans les deux C89 et C99) - mais non-standard, les compilateurs ne sont pas limités par la norme, bien sûr.


Ajoutée après la source a été posté:

Intéressant! Il semble donc plausible pour 'a = b /\ c;' attribuer le maximum de b et de c à a, et 'a = b \/ c;' à faire le minimum (ou, comme Greg Hewgill souligné, plus de chances vice-versa). Et, dans ces jours, il était probable que le moderne"+=', les opérateurs ont toujours écrit"=+' et étaient en fait deux jetons (pas de preuves à l'appui de cette assertion, à défaut de nouveau la mémoire), de sorte que l'hypothétique 'a =/\ b;"(ou, en notation moderne, 'a /\= b;') aurait été le max-opérateur d'affectation, etc.

Il se produit également pour moi que Thompson ACM Turing Award discours",Réflexions Sur la Confiance la Confiance"est en quelque sorte pertinent.

6voto

Cristián Romo Points 2802

Je ne suis pas sûr à propos de \/, mais /\ est valable de construire. Il est utilisé pour placer les deux barres obliques d'une seule ligne de commentaire sur des lignes séparées. Par exemple:

/\
/ Comment content

Cela fonctionne parce que le caractère barre oblique inverse s'échappe le retour à la ligne et de l'analyseur continue comme s'il n'était pas là. Cela ne fonctionnera pas si il y a un espace après la barre oblique inverse ou si la seconde barre oblique est en retrait. De ce fait, il est possible d'échapper à autant de retours à la ligne comme vous le souhaitez, comme dans

/\
\
\
\
\
/ Still a legal comment.

Les barres obliques inverses peuvent aussi être utilisés à la fin de l'unique ligne de commentaires à faire d'eux de continuer à la ligne suivante, comme dans

// Yet another comment \
This line is in the comment \\
And so is this one!

3voto

Cade Roux Points 53870

C n'a jamais eu ces opérateurs.

En règle générale, \ / serait un code d’échappement dans certains systèmes de chaînes, il n’est pas certain que / \ ait jamais eu de signification.

Prograide.com

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.

Powered by:

X