오류, 버그, 질문 - 페이지 312

 
Academic :

참조가 ObjectGetDouble 함수 에 전달되고 if 문에서 두 호출에 의해 반환된 항목의 진실이 확인되므로 두 함수가 모두 true를 반환한 경우에만 이러한 변수에 대한 작업이 수행되므로 이 경고가 주어져서는 안 됩니다. 이 두 변수를 모두 올바른 의미로 설정할 수 없음을 의미합니다.


컴파일러는 이러한 변수가 ObjectGetDouble 호출의 결과로 초기화될 만큼 충분히 마음을 확장하지 않습니다. 대신 참조로 전달된 입력 매개변수의 값이 명시적으로 설정되는 직접 작성해 보십시오. 컴파일러는 무엇을 말할 것인가?
 
Rosh :
컴파일러는 이러한 변수가 ObjectGetDouble 호출의 결과로 초기화될 만큼 충분히 마음을 확장하지 않습니다. 대신 참조로 전달된 입력 매개변수의 값이 명시적으로 설정되는 직접 작성해 보십시오. 컴파일러는 무엇을 말할 것인가?


라시드, 그것은 사실 "의식"이 아니라 수학입니다.

 
Academic :


라시드, 그것은 사실 "의식"이 아니라 수학입니다.

1. " 논리적 표현 의 단축 평가"라는 것이 있습니다.

2. 컴파일러는 참조로 전달된 변수가 채워질지 여부를 확실히 알 수 없습니다.

3. 문제의 가능성에 주의를 환기시키는 경고 및 경고.

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
Academic :


라시드, 그것은 사실 "의식"이 아니라 수학입니다.

좋아, 그런 함수를 정의하자

 bool AlwaysGood( double & param)
  {
   return true ;
  }
param 변수가 초기화된다는 보장이 있습니까?
 
Rosh :

좋아, 그런 함수를 정의하자

param 변수가 초기화된다는 보장이 있습니까?

이것은 "param"의 결과가 DEFINITELY로 변경되지 않는 함수입니다. 따라서 여기에서 경고가 1000% 발행되어야 합니다. :)

여기에서 표준 솔루션의 본질은 이것입니다. 값을 변경할 수 없는 코드 실행 분기가 있는 경우 이 함수는 값을 변경하지 않는 것으로 간주됩니다. 그리고 경고를 내립니다.

Rashid, 원한다면 최신 C++ 및 C 컴파일러를 사용하여 이와 같은 코드를 컴파일하겠습니다. 그러면 왼쪽 경고를 표시하지 않을 것입니다.

이것은 분명히 개선이 아닙니다. 특히 그러한 것을 감지하는 데 그러한 "문제"가 있는 경우 최적화가 전혀 없다는 큰 의심이 들게 됩니다. 아니면 있습니까?

 
Academic :

Rashid, 원한다면 최신 C++ 및 C 컴파일러를 사용하여 이와 같은 코드를 컴파일하겠습니다. 그러면 왼쪽 경고를 표시하지 않을 것입니다.

우리는 무엇에 대해 논쟁하고 있습니까? w0 설정하지 않음

추신: 메시지는 다음과 같습니다(아래 몇 줄).

 
Academic :

이것은 분명히 개선이 아닙니다. 특히 그러한 것을 감지하는 데 그러한 "문제"가 있는 경우 최적화가 전혀 없다는 큰 의심이 들게 됩니다. 아니면 있습니까?

ObjectGetDouble 함수는 독립적인(즉, 라이브러리) 구현이 있으므로 컴파일러의 제어 하에 있지 않습니다.
Документация по MQL5: Графические объекты / ObjectGetDouble
Документация по MQL5: Графические объекты / ObjectGetDouble
  • www.mql5.com
Графические объекты / ObjectGetDouble - Документация по MQL5
 
Academic :


ObjectGetDouble 에 대한 도움말을 보면:


함수의 성공 여부에 따라 true 또는 false를 반환합니다. 성공 하면 속성 값이 마지막 매개변수로 참조로 전달된 수신 변수에 배치됩니다.


이것으로부터 우리는 특정 오류의 경우 수신 변수 의 채우기가 보장되지 않는다는 결론을 내립니다. 따라서 컴파일러의 메시지는 유효합니다.

임호.

 

마지막 빌드에서 무언가 동기화되지 않았습니다.

나는 작은 조언자를 만들고 있습니다.

 int OnInit ()
  {
   Print ( "Все нормально!" ); 
   return ( 0 );
  }

나는 테스터를 실행

2011.02.22 11:54:21 코어 1 2011.02.07 00:00:00 다 괜찮아!

나는 고문을 변경합니다.

 int OnInit ()
  {
   Print ( "Тестер, Аууу, ты где?" ); 
   return ( 0 );
  }

나는 컴파일하고 테스터를 실행합니다.

2011.02.22 11:57:55 코어 1 2011.02.07 00:00:00 다 괜찮아!

터미널을 다시 시작하는 것만으로도 도움이 됩니다.

 
Serj_Che :

마지막 빌드에서 무언가 동기화되지 않았습니다.

나는 작은 조언자를 만들고 있습니다.

나는 테스터를 실행

2011.02.22 11:54:21 코어 1 2011.02.07 00:00:00 다 괜찮아!

나는 고문을 변경합니다.

나는 컴파일하고 테스터를 실행합니다.

2011.02.22 11:57:55 코어 1 2011.02.07 00:00:00 다 괜찮아!

터미널을 다시 시작하는 것만으로도 도움이 됩니다.

죄송합니다. 오늘이나 내일 새 빌드가 이 성가신 오류 없이 릴리스됩니다.