외부와 입력의 차이점 - 페이지 5

 
Alexey Navoykov :

이러한 초기화가 다른 포함 파일에서 수행된다고 상상해 보십시오. 그런 다음 최종 결과는 이러한 파일이 포함된 순서에 따라 달라집니다.

글쎄, 이러한 extern의 명백한 버그조차도

그래서 나는 그것들에 요점이 없다고 씁니다. 그것들은 단지 오래된 코드들과의 호환성을 위한 것입니다 - 나는 extern이 그것을 입력으로 바꾸고 오류를 수정하는 것을 보았습니다 ... 그렇지 않으면 그것은 도움말에 쓰여졌습니다 ... 막연한 목적 ... . extern에는 아무 의미가 없습니다 - 어떻게 검색하지 마십시오

 
Alexey Navoykov :

불행히도 MQL5에서 extern 변수의 구현은 완료되지 않았으므로 사용하지 않는 것이 좋습니다. 문제가 많습니다. 우리는 이러한 변수의 의무적 인 일회성 초기화에 대한 제어 부족에 대해 이야기하고 있습니다.

예를 들어 다음과 같이 작성할 수 있습니다.

오류가 없을 것입니다. 이러한 초기화가 다른 포함 파일에서 수행된다고 상상해 보십시오. 그런 다음 최종 결과는 이러한 파일이 포함된 순서에 따라 달라집니다.

또는 다음과 같이(실행 파일):

여기서는 extern 변수를 전혀 초기화하지 않았지만 오류도 없습니다.

따라서 동일한 변수가 다른 파일에 정의되어 있는지 여부에 대한 제어가 없습니다. 실수로 이름을 변경할 수 있지만 다른 파일에는 다른 이름의 변수가 있지만 프로그램은 아무 일도 없었던 것처럼 컴파일됩니다.

일반적으로 이것은 좋지 않습니다. 따라서 extern 변수 대신 함수를 사용하는 것이 좋습니다. 그것들은 더도 말고 덜도 말고 오직 하나의 정의만을 보장합니다.

이 방법을 사용하면 컴퓨터를 전혀 사용해서는 안 됩니다. 눈을 감으면 clave를 찌르면 쓰레기가 되기 때문입니다.

extern의 진짜 문제는 입력에서 extern을 만들려고 할 때입니다. 자세한 내용은 기억나지 않는데 오래전 일이다. 결과적으로 나는 extern을 완전히 포기하고 인클루드 파일에 간단한 변수를 선언 했으며 .

 
Igor Makanu :

글쎄, 이러한 extern의 명백한 버그조차도

그래서 나는 그것들에 요점이 없다고 씁니다. 그것들은 단지 오래된 코드들과의 호환성을 위한 것입니다 - 나는 extern이 그것을 입력으로 바꾸고 오류를 수정하는 것을 보았습니다 ... 그렇지 않으면 그것은 도움말에 쓰여졌습니다 ... 막연한 목적 ... . extern에는 아무 의미가 없습니다 - 어떻게 검색하지 마십시오

말이 되는군요. MT5의 extern include 파일에서는 전혀 입력되지 않습니다.

 
Dmitry Fedoseev :

말이 되는군요. MT5의 extern include 파일에서는 전혀 입력되지 않습니다.

포함 파일에 입력을 추가하는 이유는 무엇입니까?

나는 프로그램 작성 의 현대 세계에서 무슨 일이 일어나고 있는지 모르지만 절차적 스타일로 작성하는 것을 배웠고 OOP를 사용하기 시작했습니다. 첫 번째 스타일에서 두 번째 스타일에서는 각 논리 블록이 다른 프로그램으로 전송될 때 완전히 작동합니다. 함수를 작성했습니다. - 설명(헤더에)에서 사용하는 모든 매개변수가 있습니다. - 입력이 필요하지 않습니다. - 이 함수를 잘라내어 다른 파일에 붙여넣고, 있는 그대로 "이동"했습니다. - 또한 클래스와 함께.

그리고 입력 자체는 사용자 인터페이스만 생성해야 하며 항상 기본 파일에 설명되어야 합니다.


그리고 포함된 파일인 IMHO에서 extern을 사용하면 추적하기 어려운 버그가 발생합니다. @Alexey Navoykov 는 위에서 어떻게 발생하는지 보여주었지만 불행히도 모든 프로그래머의 변수 이름 중 절반 이상이 동일한 이름을 가지고 있습니다. 문자에 대한 최대 차이점은 MagicNumber 또는 Magic의 예와 같이 대문자 / 소문자를 사용하는 것입니다. KB를 보면 다음과 같은 변수가 있으며 방법에는 위협이 있습니다. 이제 extern을 사용하는 사람이 거의 없기 때문에 변수에 "shadow" extern

 
Igor Makanu :

포함 파일에 입력을 추가하는 이유는 무엇입니까?

나는 프로그램 작성 의 현대 세계에서 무슨 일이 일어나고 있는지 모르지만 절차적 스타일로 작성하는 것을 배웠고 OOP를 사용하기 시작했습니다. 첫 번째 스타일에서 두 번째 스타일에서는 각 논리 블록이 다른 프로그램으로 전송될 때 완전히 작동합니다. 함수를 작성했습니다. - 설명(헤더에)에서 사용하는 모든 매개변수가 있습니다. - 입력이 필요하지 않습니다. - 이 함수를 잘라내어 다른 파일에 붙여넣고, 있는 그대로 "이동"했습니다. - 또한 클래스와 함께.

그리고 입력 자체는 사용자 인터페이스만 생성해야 하며 항상 기본 파일에 설명되어야 합니다.

이 방법이 아닙니다. 파일을 포함할 extern을 추가합니다. 인클루드 파일의 메인 파일에 선언된 입력을 사용할 수 있도록 하기 위함입니다.

그건 그렇고, 포함 된 파일을 사용하기 시작하자마자 이것이 필요합니다.

 
Dmitry Fedoseev :

이 방법이 아닙니다. 파일을 포함할 extern을 추가합니다. 인클루드 파일의 메인 파일에 선언된 입력을 사용할 수 있도록 하기 위함입니다.

그건 그렇고, 포함 된 파일을 사용하기 시작하자마자 이것이 필요합니다.

extern을 사용하는 편리함의 예를 제시하십시오.

 
Igor Makanu :

extern을 사용하는 편리함의 예를 제시하십시오.

오랫동안 여기 에 있었어

 
Dmitry Fedoseev :

이 방법을 사용하면 컴퓨터를 전혀 사용해서는 안 됩니다. 눈을 감으면 clave를 찌르면 쓰레기가 되기 때문입니다.

물론 쓰레기는 밝혀지지만 컴파일되지는 않을 것입니다. 컴파일러의 작업은 또한 호그워시를 컴파일하지 않는 것으로 구성됩니다. 그리고 고려중인 경우 그는이 작업에 대처하지 않습니다.
 
Dmitry Fedoseev :

오랫동안 여기 에 있었어

글쎄, 그게 내가 얘기했던거야

귀하의 예는 숨겨진 버그의 생성이며 변수 이름 x가 자주 사용됩니다 .... 위에 썼습니다.

IMHO 다음과 같이 표시되어야 합니다.

 extern int x;

int z()
  {
   static int x;
   x= 122 ;
   return x;
  }
 
Igor Makanu :

글쎄, 그게 내가 얘기했던거야

귀하의 예는 숨겨진 버그의 생성이며 변수 이름 x가 자주 사용됩니다 .... 위에 썼습니다.

IMHO 다음과 같이 표시되어야 합니다.

가지 않을거야. 변수 x는 하나의 함수뿐만 아니라 모든 함수에서 사용할 수 있어야 합니다. 그리고 더 나아가 기본 파일과 연결된 모든 파일에서 모두 사용할 수 있어야 합니다.