2011-02-03 26 views
8

Co oznacza znak zapytania (?) W C?Co robi? w C oznacza?

+1

Czy możesz podać kontekstowy przykład miejsca, w którym zobaczysz znak "?"? –

+0

@bagrazed: Po prostu ciekawy: jakie inne zastosowanie niż operator trójskładnikowy myślisz? – chris

+0

@chris to również (w poważnym, starym kodzie) część [trigraph] (http://msdn.microsoft.com/en-us/library/bt0y4awe.aspx), ponieważ Benoit pobił mnie do odpowiedzi. – Rup

Odpowiedz

17

? jest pierwszym symbolem operatora potrójnego ?:.

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

a będzie miał wartość 1, jeśli b jest równa 0, a 0 w przeciwnym razie.

4

to prawdopodobnie częścią ternary operator:

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

Tylko po to, aby uratować przyszłe pokolenia przed zamieszaniem. Jest to "operator warunkowy". Jest to po prostu operator trójskładnikowy, którego jest tylko jeden w C i C++. Istnieje również wiele operatorów jednoargumentowych (~,!, -) i binarnych (+, -, <<) w C/C++. Neato! –

11

Dodatkowo do innych odpowiedzi, ? może być częścią trigraph.

+0

Może również być częścią ciągu lub znaku w ogóle bez bycia trigrafem: 'char c = '?'; char const * s = "?" '. –

6

To ternary Operator który operator warunkowy wykorzystuje jak if inny

przykład

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; 

Zastosowanie: Składnia : jest

assignment_Variable = Condition ? value_if_true : value_if_false; 
1

Najprawdopodobniej "?" jest operatorem trójskładnikowym. Jego gramatyka jest:

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

Jest to miły skrótem typowym if-else:

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

gdyż może to zazwyczaj mieszczą się na jednej linii i może poprawić czytelność.

Niektóre odpowiedzi odnoszą się tutaj do trigrafii, która jest związana z preprocesorem C. Spójrz na to naprawdę głupiego programu trigraphs.c:

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

powołując się tylko preprocesora C uruchamiając gcc -E -trigraphs trigraph.c wyjście jest

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

Mam nadzieję, że wyjaśnia trochę co za trójznaków są i co "?" "oznacza" w C.