2011-06-15 2 views
5
if(...) { 
    ... 
} 

위의 경우에 ;은 선택 사항이며, c/C++에서 }이 필요하면 세미콜론이 올 때입니까?c/C++에서 세미콜론은 언제 필요합니까?

+0

예제에서 선택적인 세미콜론은 어디에 있습니까? C에서 선택적 구문을 모른다. –

+0

쉼표 또는 세미콜론? ... 나는 세미콜론을 사용하기 때문에 조금 혼란스럽고 쉼표에 대해 물어 봅니다 ... – Jason

+0

세미콜론, 오타를 유감으로 생각합니다 ... – cpuer

답변

14
int a[2] = {1,2}, j = 5; 

은 배열 또는 구조의 초기화 {} 모든 후속 변수 마치면 , 후에 선언된다.

: 질문을 변경함에 따라; ;class, enum, 초기화 구문 선언 뒤에 필수입니다.

class A {}; // same for `struct 
enum E {}; // enum class (c++0x) 
int a[] = {1,2}; // array or object initialization 
+0

이 모든 것의 뒤에 합리적인? – cpuer

+3

@cpuer 그것은 근거가 아니지만'struct {int i; } s;는 C와 C++에서 의미가있다. 객체 (여기,'s')가 필요하지 않으면';'가 남아 있습니다. –

+1

@cpuer :'class'와'enum' 예제에서 Ernest의 대답에 대한 설명에서 설명했습니다. 배열이나 객체의 초기화를 위해서는 단순히 명령문이고 모든 명령문이';'s : –

5

자체로 세미콜론은 빈 문, 당신은 문이 법적 어디 여분을 추가 할 수 있습니다. 따라서 if 다음에 중괄호 다음에 세미콜론을 넣는 것이 합당합니다. 단, if과 전혀 관련이 없습니다. 내가 생각할 수있는 유일한 곳은 세미콜론이 인데, 대괄호 바로 뒤에는 C++의 클래스 선언 다음에이 필요합니다.

+1

클래스 선언 다음에';'가 필요하지만 함수 선언 이후에 필요하지 않은 이유는 무엇입니까? C++ 파서는';'없이 파싱 할 수 없다. – cpuer

+9

@cpuer : 정의 사이트에서 인스턴스를 선언 할 수 있기 때문입니다. 예를 들면 :'struct ABC {int foo; int 바; } 예제;'ABC' 타입의'example' 변수를 생성합니다. –

2

선언이 인 경우 닫는 중괄호 다음에 세미콜론이 표시됩니다. 그 다음에 세미콜론이 필요하지 않은 의 끝, 하나를 사용하는 경우 이것은 if의 중간 인 경우, 불법이 될 수있는 추가 빈 을 만드는 경우 - else 또는 do - while가 (또는 C++에서 try - catch)

+0

'do-while'은 끝에 세미콜론이 필요합니다! – rubenvb

+0

@rubenvb :'}'를'do'-'while' 루프에 넣으려고하면 구문 오류가 발생합니다. –

+0

하지만 마지막')'다음에 필요합니다. – rubenvb

관련 문제