2011-02-03 21 views
8

¿Qué significa un signo de interrogación (?) En C?¿Qué hace? en C significa?

+1

¿Podría darnos un ejemplo contextual de dónde está viendo el '?'? –

+0

@bitcrazed: Simplemente curioso: ¿en qué otro uso está pensando el operador ternario? – chris

+0

@chris es también (en serio, viejo código) parte de un [trigraph] (http://msdn.microsoft.com/en-us/library/bt0y4awe.aspx), cuando Benoit me golpeó para responder. – Rup

Respuesta

17

? es el primer símbolo del operador ternario ?:.

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

a tendrá el valor 1 si b es igual a 0, y 0 en caso contrario.

4

Eso es probablemente una parte de la ternary operator:

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

Solo para salvar a las generaciones futuras de cualquier confusión aquí. Es el "operador condicional". Simplemente resulta ser un operador ternario, del cual solo hay uno en C y C++. Hay muchos operadores unarios (~,!, -) y binarios (+, -, <<) en C/C++ también. Neato! –

11

Adicionalmente a otras respuestas, ? puede ser parte de un trigraph.

+0

También puede ser parte de una cadena o carácter en general sin ser un trigraph: 'char c = '?'; char const * s = "?" '. –

6

Esta es una ternary Operator que es utiliza operador condicional como if-else

ejemplo

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; 

Uso: Sintaxis de :? es

assignment_Variable = Condition ? value_if_true : value_if_false; 
1

Más probable el '?' es el operador ternario. Su gramática es:

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

es un buen atajo para la típica instrucción if-else:

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

ya que puede adaptarse por lo general en una línea y puede mejorar la legibilidad.

Algunas respuestas aquí se refieren a un trigraph, que es relevante para el preprocesador C. Echar un vistazo a este programa realmente tonto, trigraphs.c:

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

invocando sólo el preprocesador C mediante la ejecución de gcc -E -trigraphs trigraph.c la salida es

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

Esperemos que clarifica un poco lo que un trigrafos son, y lo que una '?' "significa" en C.