48 votes

Pourquoi '?' et '\?' donnent-ils le même résultat en C ?

En C, pourquoi ces deux morceaux de code donnent-ils le même résultat ?

#include<stdio.h>

int main(void)
{
    const char c='\?';
    printf("%c",c);
}

y

#include<stdio.h>

int main(void)
{
    const char c='?';
    printf("%c",c);
}

Je comprends qu'un backslash est utilisé pour faire des guillemets ( " o ' ) et une barre oblique inverse évidente pour le compilateur lorsque nous utilisons printf(), mais pourquoi cela fonctionne-t-il pour le " ?"?

24 votes

"un backslash est utilisé pour faire des guillemets" non, c'est utilisé pour leur échapper

86voto

Bathsheba Points 23209

\? est une séquence d'échappement exactement équivalente à ? et est utilisé pour échapper à trigraphes :

#include <stdio.h>
int main(void) {
    printf("%s %s", "??=", "?\?="); // output is # ??=
}

29 votes

A noter : trigraphes sont utilisés pour écrire des caractères qui n'existent pas dans un certain jeu de caractères utilisé pour écrire le code source C. Un trigraphe se compose de ?? plus un caractère alternatif. ??/ par exemple, signifie \. Donc pour utiliser ??/ dans un littéral de chaîne de caractères, il doit être écrit comme suit ?\?/ pour empêcher l'interprétation comme un trigramme.

9 votes

@PaulOgilvie -- Les trigraphes sont également utilisés lorsque les claviers locaux ne disposent pas d'un caractère particulier, même s'il est représentable dans le codage actuel des caractères.

3 votes

El les caractères qui peuvent être exprimés par des trigraphes sont [ ] { } # ^ | ~ et la barre oblique inversée. La raison d'être initiale de cette fonctionnalité était de rendre le C plus utilisable dans la pratique au sein de l'Union européenne. les variantes nationales de la norme ISO 646 qui a remplacé ces caractères par d'autres alphabétiques accentués.

29voto

Citation : C11 , chapitre §6.4.4.4p4

Le guillemet double " et point d'interrogation ? sont représentables soit par eux-mêmes ou par les séquences d'échappement \" y \? respectivement, mais ... .

C'est moi qui souligne

Donc la séquence d'échappement \? est traité de la même manière que ? .

20voto

Joachim Pileborg Points 121221

Parce que '\?' est valide code d'évasion et est égal à un point d'interrogation.

0voto

Lorsque vous définissez une char o string le compilateur analyse la barre oblique inversée dans ce type de fichier char o string comme séquence d'échappement.

-1voto

**

the simple answer of your question is 
\? means ?. instead of using \? you can using ? .
\? is escape representation and ? is character representation means both are same.

J'ai lié une image pour que vous compreniez plus facilement

**

"cliquez ici pour voir l'image " --> dans cette image vous devez trouver \ ? dans le caractère Escape

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