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

 
Aleksey Mavrin :

0xFF는 아마도 컴파일러를 4바이트로 바꿉니다.

아니요, 하지만 올바르게 초기화됩니다.

 uchar uc[ 16 ];
ArrayInitialize (uc,( uchar ) 0xFF ); // truncation of constant value        
ArrayPrint (uc);                   //     255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
 

좋은 오후, 문제를 해결하는 방법:

최적화할 때 오류가 나타납니다.

2020.05.31 15:05:32.738 코어 7 0:00:00.153에서 "OnTick 기능 의 중요한 런타임 오류 503(제로 나누기, 모듈 Experts\e1.ex5, 파일 e1.mq5, 줄 826, 열 73)" 오류로 테스트된 유전자 패스(0, 53)

더블 믹스1 = NormalizeDouble((MathAbs(ZExtLevel[0] - ZExtLevel[1])), 2);

더블 믹스2 = NormalizeDouble((MathAbs(ZExtLevel[1] - ZExtLevel[2])), 2);

더블 믹스 = NormalizeDouble((Mix1/Mix2),2);

당신은 무엇을하고 있었습니까?

1) Mix1과 Mix2를 곱하여 소수점 이하 자릿수를 줄입니다.

2) 정규화 중에 문자 수를 변경했습니다.

3) 모든 ZExtLevel은 0이 포함되어 있지 않은지 확인했습니다.


 
Igor Makanu :

아니요, 하지만 올바르게 초기화됩니다.

왜 안 된다고 확신합니까? 기본적으로 정수는 나타냅니다. sizeof는 이것을 말합니다

 
Aleksey Mavrin :

왜 안 된다고 확신합니까? 기본적으로 정수는 나타냅니다. sizeof는 이것을 말합니다

정확히는 uint.

 
Aleksey Mavrin :

왜 안 된다고 확신합니까? 기본적으로 정수는 나타냅니다. sizeof는 이것을 말합니다


경고없이 작동합니까?

 char c[ 16 ];
ArrayInitialize (c, 127 );

해당 ArrayInitialize 서명이 있기 때문에

 int   ArrayInitialize(
   char     array[],     // инициализируемый массив
   char      value          // значение, которое будет установлено
   );

그리고 서명되지 않은 uchar의 경우 알 수 없는 이유로 ArrayInitialize()를 수행하지 않았습니다.

 
Igor Makanu :

경고없이 작동합니까?

해당 ArrayInitialize 서명이 있기 때문에

그리고 서명되지 않은 uchar의 경우 알 수 없는 이유로 ArrayInitialize()를 수행하지 않았습니다.

서명이나 부재에 관한 것이 아닙니다. 사실은 4바이트가 1로 변환되고 정보가 이론적으로 손실될 수 있다는 것입니다. 컴파일러는 이에 대해 경고합니다.

ArrayInitialize (c, (char)10000 );

또한 경고가있을 것입니다

 
Aleksey Mavrin :

서명이나 부재에 관한 것이 아닙니다. 사실은 4바이트가 1로 변환되고 정보가 이론적으로 손실될 수 있다는 것입니다. 컴파일러는 이에 대해 경고합니다.

ArrayInitialize (c, (char)10000 );

경고도 있을 것이다

네, 분명 처음에는 그랬습니다.

여기서 질문이 다릅니다. char가 실제로 필요한 곳입니까?

StringToCharArray() 및 CryptEncode()에서 uchar를 사용하고 도움말을 살펴보면 여전히

그래서 ArrayInitialize를 사용하여 char 배열을 초기화할 수 있지만 uchar는 사용할 수 없습니다.


오케이 holivar 귀족이 밝혀졌습니다. 나는 무언가가 바뀔지 의심 스럽습니다.)


추신: 0xFF = 255(1바이트)

 
Igor Makanu :

네, 그것이 처음부터 모든 것이었음이 분명합니다

여기에 질문이 다릅니다. 이것이 char가 실제로 필요한 곳입니까?

StringToCharArray() 및 CryptEncode()에서 uchar를 사용하고 도움말을 살펴보면 여전히

그래서 ArrayInitialize를 사용하여 char 배열을 초기화할 수 있지만 uchar는 초기화할 수 없습니다.


좋아, 고귀한 holivar가 밝혀졌습니다. 나는 무언가가 바뀔 것이라고 의심합니다.)


추신: 0xFF = 255(1바이트)

 ArrayInitialize (uc,( char ) 0xFF ); // truncation of constant value         
 
Igor Makanu :

예, 이것이 원래 있었던 것이 분명합니다.

여기서 질문이 다릅니다. char가 실제로 필요한 곳입니까?

StringToCharArray() 및 CryptEncode()에서 uchar를 사용하고 도움말을 살펴보면 여전히

그래서 ArrayInitialize를 사용하여 char 배열을 초기화 할 수 있지만 uchar를 초기화할 수는 없습니다.

오케이 holivar 귀족이 밝혀졌습니다. 나는 무언가가 바뀔지 의심 스럽습니다.)

추신: 0xFF = 255(1바이트)

왜 못하시는지 이해가 안됩니다. uchar를 사용하면 모든 것이 char와 동일하게 작동합니다.

처음에 경고 이유를 물었습니다. 1에 4바이트가 있기 때문입니다. 그리고 255의 값은 전혀 중요하지 않습니다. 0과 1은 1과 2, 4와 8바이트 모두 동일할 수 있음)

 

Alain Verleyen :

 ArrayInitialize (uc,( char ) 0xFF );

확인:

 uchar uc[ 16 ];
ArrayInitialize (uc, ( char ) 0xFF );
ArrayPrint (uc); 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

알겠습니다. 컴파일러 경고 없이 작동합니다.

감사해요