2011-02-03 107 views
8

Dấu hỏi (?) Trong C có nghĩa là gì?Làm gì? trong C nghĩa là gì?

+1

Bạn có thể cho chúng tôi ví dụ theo ngữ cảnh về nơi bạn nhìn thấy '?' không? –

+0

@bitcrazed: Chỉ cần tò mò: những gì sử dụng khác hơn so với các nhà điều hành ternary là bạn nghĩ đến? – chris

+0

@chris nó cũng (trong mã nghiêm túc cũ) một phần của một [trigraph] (http://msdn.microsoft.com/en-us/library/bt0y4awe.aspx), như Benoit đánh bại tôi để trả lời. – Rup

Trả lời

17

? là biểu tượng đầu tiên của các nhà điều hành ternary ?:.

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

a sẽ có giá trị 1 nếu b bằng 0, và 0 nếu ngược lại.

4

Đó có thể là một phần của ternary operator:

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

Chỉ để cứu các thế hệ tương lai về bất kỳ sự nhầm lẫn nào ở đây. Nó là "toán tử có điều kiện". Nó chỉ xảy ra là một toán tử bậc ba, trong đó chỉ có một trong C và C++. Có rất nhiều toán tử nhị phân (~,!, -) và nhị phân (+, -, <<) trong C/C++. Neato! –

11

Ngoài ra để câu trả lời khác, ? thể là một phần của một trigraph.

+0

Nó cũng có thể là một phần của chuỗi hoặc ký tự nói chung mà không phải là một dấu vết: 'char c = '?'; char const * s = "?" '. –

6

Đây là một ternary Operator đó là nhà điều hành có điều kiện sử dụng như if-else

dụ

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; 

Cách sử dụng: Cú pháp của :

assignment_Variable = Condition ? value_if_true : value_if_false; 
1

Rất có thể các '?' là toán tử bậc ba. ngữ pháp của nó là:

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

Đó là một cách viết tắt tốt đẹp cho các báo cáo điển hình if-else:

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

vì nó thường có thể phù hợp trên cùng một dòng và có thể cải thiện khả năng đọc.

Một số câu trả lời ở đây đề cập đến một dấu vết, có liên quan đến bộ tiền xử lý C. Hãy nhìn vào chương trình thực sự ngớ ngẩn này, trigraphs.c:

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

cách gọi chỉ Preprocessor c bằng cách chạy gcc -E -trigraphs trigraph.c đầu ra là

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

Hy vọng rằng làm rõ một chút những gì một trigraphs, và những gì một '?' "có nghĩa là" trong C.