2011-02-03 26 views
8

Cosa significa un punto interrogativo (?) In C?Cosa fa? in C?

+1

Potresti fornirci un esempio contestuale di dove stai vedendo il '?'? –

+0

@ bitcrazed: Solo curioso: a quale altro uso stai pensando l'operatore ternario? – chris

+0

@chris è anche (in codice seriamente vecchio) parte di un [trigraph] (http://msdn.microsoft.com/en-us/library/bt0y4awe.aspx), come Benoit mi ha battuto per rispondere. – Rup

risposta

17

? è il primo simbolo del operatore ternario ?:.

a = (b==0) ? 1 : 0; 

a avrà il valore 1 se b è uguale a 0, e 0 altrimenti.

4

Questo è probabilmente una parte del ternary operator:

const int numApples = …; 
printf("I have %i apple%s.\n", numApples == 1 ? "" : "s"); 
+0

Solo per salvare le generazioni future su qualsiasi confusione qui. È "l'operatore condizionale". Capita semplicemente di essere un operatore ternario, di cui ce n'è solo uno in C e C++. Ci sono anche molti operatori unari (~,!, -) e binari (+, -, <<) in C/C++. Neato! –

11

In aggiunta ad altre risposte, ? può essere parte di un trigraph.

+0

Può anche essere parte di una stringa o di un carattere in generale senza essere un trigrafo: 'char c = '?'; char const * s = "?" '. –

6

Questa è una ternary Operator che è operatore condizionale utilizza come if-else

esempio

int i=1; 
int j=2; 
int k; 
k= i > j ? i : j; 
//which is same as 
if(i>j) 
    k=i; 
else 
    k=j; 

utilizzati: Sintassi di : è

assignment_Variable = Condition ? value_if_true : value_if_false; 
1

Più probabilmente il '?' è l'operatore ternario. La sua grammatica è:

RESULT = (COND) ? (STATEMEN IF TRUE) : (STATEMENT IF FALSE) 

è una bella scorciatoia per il tipico istruzione if-else:

if (COND) { 
    RESULT = (STATEMENT IF TRUE); 
} else { 
    RESULT = (STATEMENT IF FALSE); 

in quanto di solito può stare su una sola riga e può migliorare la leggibilità.

Alcune risposte qui si riferiscono a un trigramma, che è rilevante per il preprocessore C. Date un'occhiata a questo programma veramente stupido, trigraphs.c:

# /* preprocessor will remove single hash symbols and this comment */ 
int main() 
{ 
    char *t = "??="; 
    char *p = "??/""; 
    char *s = "??'"; 
    ??(, ??), ??! ??<, ??>, ??- 
    return 0; 
} 

invocare solo la c preprocessore eseguendo gcc -E -trigraphs trigraph.c l'uscita è

int main() 
{ 
char *t = "#" 
char *p = "\""; 
char *s = "^"; 
[, ], | {, }, ~ 
return 0; 
} 

Speriamo che chiarisce un po 'quello che un trigrammi sono, e ciò che un '?' "significa" in C.