2009-08-28 5 views
1

변수를 선언했지만 나중에 프로그램에서 사용하지 않으면 컴파일러에서 경고 메시지를 표시하고 "모든 경고를 무시해서는 안됩니다." 경고는 거기 있니? 어떻게 오류가 발생할 수 있습니까? 감사!변수가 선언되었지만 사용되지 않으면 오류가 발생할 수 있습니까?

+0

Sinan : 자신의 게시물을 편집 할 수있는 능력이있어 약간의 언어 오타에 대해 너무 걱정하지 않아도됩니다 :) –

+0

"c/C++"를 입력하고 맞춤법을 잘못 입력하려고합니다 – zjsworm

+0

Sinan : 당연히, 그러나 그 때 나는 오식에 관하여 적은 코멘트가 필요하지 않다는 것을 생각한다 :) –

답변

6

처음에는 사용되지 않는 변수 선언은 메모리 낭비이므로 버그 자체입니다.

둘째, 더 중요한 것은 다음과 같이 사용하지 않은 변수에 대한 선언을 작성하는 것입니다. 변수를 사용할 계획이 없다면 변수 선언을 귀찮게하지 않았으므로 을 잊어 버렸으므로을 사용하는 것이 좋습니다. 그 자리에 잘못된 변수 이름을 입력 할 수 있습니까? 그 변수에 저장할 결과가있는 중요한 계산을 수행하는 것을 잊었을 가능성이 있습니까? 물론

, 당신은 단지 그것이 경고 아닌 오류의 이유는, 당신이 필요로하지 않는 결국 뭔가를 선언 한 수도 있지만, 그 경고가 중요한 부분에 당신을 가리킬 수있는이 상황을 쉽게 알 수 누락 된 코드는 실제로 버그가 될 수 있습니다.

+2

대부분의 컴파일러는 최적화 할 수없는 ctor 및 dctor가있는 객체가 아니라면 첫 번째 점은 중요하지 않습니다. – strager

+0

그리고 만약 생성자와 소멸자가 최적화되어 있지 않다면, 객체가 사용되지 않는다고 말하는 것은 정확하지 않습니다. (그리고 컴파일러가 경고를 주면 컴파일러의 버그입니다.) –

+0

@Kennedy, 나는 동의하지 않는다. 프로그래머가 변수를 사용하고 있지 않지만 객체가 여전히 인스턴스화되어 있습니다. 경고는 객체가 사용되지 않고 인스턴스화되는 객체에 관한 것이지 아무것도 수행하지 않는 변수에 관한 것이 아닙니다. – strager

1

버그가 있음을 나타낼 수 있습니다. 선언되었지만 사용되지 않은 변수는 분명히 프로그래밍 오류입니다. 그 이유는 무엇입니까?

2

아마도 변수를 사용하려고했기 때문입니다. 일반적으로 변수를 선언하고 사용하지 마십시오.

이것은 유용한 경고이며 대부분의 언어로 존재합니다.

+2

나는 "당신은 일반적으로 변수를 선언하지 않고 * 사용하지 않는다"고 생각한다. –

+0

어, 고마워, 고정 :) –

2

그것은 발생하지 않습니다

는 그것은 당신이 실수로 대신 당신이 의미하는 하나의 또 다른 변수를 사용 오타를 감지에 도움이 될 수

,이 경고는 사용하지 않은 사람 : 당신을 생각 나게합니다 오류. 변수가 아무 것도하지 않기 때문에 (보통 컴파일러의 상위 레벨에서만 경고가 발생합니다.) 변수를 사용하려고했으나 사용하지 않았 음을 나타낼 수 있습니다. 경우에 따라 코드가 올바르게 작동하지 않을 수도 있습니다.

컴파일러가 여러분에게 약간 이상한 짓을했음을 경고하려고 시도한 것처럼 코드가 실패 할 수있는 것은 아닙니다.

+0

컴파일러 오류를 일으키지 않는다. 모든 경고를 오류로 보았습니다.)하지만 OP가 왜 * 프로그래밍 오류 *로 간주 될 수 있는지 궁금해했기 때문에 컴파일러는 그러한 변수에 대한 경고를 내 보냅니다. –

+0

네, 저도 그 사실을 설명하려고 노력 했었습니다.하지만 원래의 질문을 명확히하지 않았습니다. 그래서 나는 둘 다 목표로 삼을 거라고 생각했습니다. – Peter

+0

네, 모든 경고가 어떤 경우에는 오류로 끝날 것이라고 생각했지만,이 경우에는 어떻게 될 수 있는지 몰랐습니다. 이제 나는 그것에 대해 분명하다, 너희들 모두에게 감사하라! – zjsworm

0

이와 비슷한 사항에 대해 묻고 있습니까?

int function() { 
    double x; 

    return 42; 
} 

잘, 그것은 사용하지 않는입니다 때문에 변수 x가 사용되지라는 경고가있다. 변수가 사용되지 않으면 아무것도 수행하지 않기 때문에 경고입니다.

변수를 잘못 입력하거나 실수로 섀도 잉 한 경우이 경고 메시지가 나타날 수 있습니다. 예를 들어 대신 42 열 번 인쇄

void printArgument10Times(int i) { 
    for(int i = 0; i < 10; ++i) { 
     std::cout << i << std::endl; 
    } 
} 

// ... 

printArgument10Times(42); 

, 그것은 0에서 9 i는 그림자도되지 않는이었다 인쇄합니다. 컴파일러는 두 가지 모두를 알려줄 것입니다.

* C++에서는 생성자와 deconstructor가 호출됩니다.

관련 문제