전문가를 위한 질문 #define - 페이지 2

 
글쎄, 미쳤어, 소년조차도 패드 없이는 살 수 없습니다.
 
Nikolai Karetnikov :

고맙습니다! )

본질적으로.

클래스가있는 변형에서도 중지했습니다. 매일 사용하지 않는 #define 매개변수화와 같은 기본 사항도 금세 잊혀집니다.

신경으로.

맙소사, 여기 있는 모든 사람이 얼마나 취약한지, 당신은 화를 내거나 기분을 상하게 할 의도가 없이 숨김없이 질문을 던집니다. 그러나 아니요, 인정할 수 없는 천재의 영혼 어딘가에서 다른 연인을 희생시키면서 자신을 주장하려는 욕망이 따끔거리고 재미있습니다. 나는 정기적으로 글을 작성하지만 영어 포럼에서는 이것을 접하지 못합니다. 이것을 깨닫고 나는 보통 그런 말에 반응하지 않으려고 노력하지만, 드미트리가 말싸움을 하고 싶다면, 나는 당신을 자신의 발산에 푹 담그어 즐거움을 줄 것입니다.

파리를 운전해, 자기야.

 
Vladimir Simakov :

왜 이 솔루션을 바로 사람에게 보여주지 않았나요?)))

UPD: bezgovna - 철자 없음 sh..t)))

글쎄요, 당신은 내가 그것을 몰랐다는 생각에 위로가 됩니다. 따라서 자신의 드롭 데드의 오르가즘에서 계속 싸우십시오.

 
Dmitry Fedoseev :
글쎄, 미쳤어, 소년조차도 패드 없이는 살 수 없습니다.

패드에 대해.

싱글톤이 좋은 이유 상태를 저장하고 복잡한 논리 등에 따라 로그를 처리할 수 있다는 사실과 모든 것이 기본 코드에서 간결합니다. 따라서 올바른 프로젝트 아키텍처가 생성되고 코드 자체가 더 읽기 쉬워집니다.

추신. 예, 모든 것이 아마추어입니다. 여기 커뮤니티의 많은 사람들에게 헝가리 표기법이 있는 스파게티 코드는 훌륭하고 가깝고 각 틱 에서 모든 주문과 위치(일반적으로 모두)를 반복하는 마조히즘이 번창합니다)

 

아주 오래전(몇 년 전) .... 최고의 로그에 대한 주제가 이미 분리되어 있었는지 다른 분기에 있었는지 기억이 나지 않습니다.

그러나 그들은 조금 다르게 했습니다. 그들은 함수의 이름을 무시하고 함수 이름의 모든 종류의 매크로 줄을 추가했습니다. 그런 다음 즉석에서 핸들러를 변경할 수 있었습니다.

"#defin PRINT 준비; 인쇄"와 같은 것

글쎄, 인쇄 자체가 스타일이다

무효 인쇄(문자열 a; 문자열 a1="";     string a2="";....... // 64번. 죄송합니다. 그냥 쓸 수 없습니다 ...a[]

{

인쇄 (우리의 준비, 주장);

}

일반 인쇄와 마찬가지로 정의 작업이 가능했으며 핸들러를 변경하여 파일에 데이터를 쓰거나 화면에 표시할 수도 있습니다. 동시에 인수의 개수는 임의(최대 64개) // 모르시는 분들을 위한 글입니다

그건 그렇고, 이것은 부분적으로   작가가 질문한 것

 
Dmitry Fedoseev :
그러나 불행히도 당신은 빨판에 인상을 남기지 않을 것입니다.

하시겠습니까?

죄송합니다. 어셈블러를 사용하던 시절이 기억에 남습니다. 매크로 확장(매크로)은 컴파일 직전에 정의를 해당 코드로 바꿀 수 있는 도구입니다.

간단히 말해서, 어셈블러에서의 프로그래밍은 상당히 치질이며 서브루틴이 없습니다.

MQL로 프로그래밍하는 것이 훨씬 더 편안합니다.

질문: 서브루틴을 작성하는 것이 더 편합니까 아니면 그냥 인쇄 명령("시트 없음")을 작성하는 것이 더 편합니까? 또는 전처리기에서 미리 정의할 것이 있습니까?

 
Алексей Тарабанов :

(1) 하시겠습니까?

죄송합니다. 어셈블러를 사용하던 시절이 기억에 남습니다. 매크로 확장(매크로)은 컴파일 직전에 정의를 해당 코드로 바꿀 수 있는 도구입니다.

(2) 간단히 말해서, Assembler에서의 프로그래밍은 상당히 치질이며 서브루틴이 없습니다.

MQL로 프로그래밍하는 것이 훨씬 더 편안합니다.

(3) 질문: 서브루틴을 작성하는 것이 더 편합니까 아니면 그냥 Print("시트 없음"); 또는 전처리기에서 미리 정의할 것이 있습니까?

1) 질문은 저를 위한 것이 아닙니다.

2) 어셈블러에는 서브루틴이 있습니다.

3) 썩은 달걀도 가치가 없는 문제에 대해 헛소리를 하지 않는 것이 더 편합니다.

 
Alexandr Andreev :

아주 오래전(몇 년 전) .... 최고의 로그에 대한 주제가 이미 분리되어 있었는지 다른 분기에 있었는지 기억이 나지 않습니다.

그러나 그들은 조금 다르게 했습니다. 그들은 함수의 이름을 무시하고 함수 이름의 모든 종류의 매크로 줄을 추가했습니다. 그런 다음 즉석에서 핸들러를 변경할 수 있었습니다.

"#defin PRINT 준비; 인쇄"와 같은 것

글쎄, 인쇄 자체가 스타일이다

무효 인쇄(문자열 a; 문자열 a1="";     string a2="";....... // 64번. 죄송합니다. 그냥 쓸 수 없습니다 ...a[]

{

인쇄(우리의 준비, 주장);

}

일반 인쇄와 마찬가지로 정의 작업이 가능했으며 핸들러를 변경하여 파일에 데이터를 쓰거나 화면에 표시할 수도 있습니다. 동시에 인수의 개수는 임의(최대 64개) // 모르시는 분들을 위한 글입니다

그건 그렇고, 이것은 부분적으로   작가가 질문한 것

string aN="" 및 63번은 치열합니다.

내가 설명한다:

  1. string은 wchar_t*를 래핑하는 객체입니다.
  2. string=""을 63번 수행하면 다음을 수행합니다. 메모리는 63개의 문자열 객체에 할당됩니다(이 경우 스택에서), 매개변수 생성자가 호출되고(63번), 특정 크기의 wchar_t * 버퍼가 할당됩니다. 힙(정확히 거기에 있음)에서 0x0000으로 초기화되는 처음 두 바이트(예, 63번도 발생합니다).

이미 이 스타일로 수행하고 있다면 string=NULL을 수행합니다. 이 경우 힙에 불필요한 메모리를 할당하는 주요 비용을 제거합니다.

UPD. 아니요, 제가 틀렸습니다. 모든 것이 현명하게 완료되면 힙 에 메모리가 할당 되지 않습니다.

 
Vladimir Simakov :

string aN="" 및 63번은 치열합니다.

내가 설명한다:

  1. string은 wchar_t*를 래핑하는 객체입니다.
  2. string=""을 63번 수행하면 다음을 수행합니다. 메모리는 63개의 문자열 객체에 할당됩니다(이 경우 스택에서), 매개변수 생성자가 호출되고(63번), 특정 크기의 wchar_t * 버퍼가 할당됩니다. 힙(정확히 거기에 있음)에서 0x0000으로 초기화되는 처음 두 바이트(예, 63번도 발생합니다).

이미 이 스타일로 수행하고 있다면 string=NULL을 수행합니다. 이 경우 힙에 불필요한 메모리를 할당하는 주요 비용을 제거합니다.

UPD. 아니요, 제가 틀렸습니다. 모든 것이 현명하게 완료되면 힙 에 메모리가 할당 되지 않습니다.

여기서 당신은 다시 한 번 대화에 대해 vkuril이 아닙니다. Alexander는 정의를 통해 Print()를 대체하는 방법에 대해 씁니다(전체 파일을 크롤링하지 않고 모든 인쇄물을 찾지 않도록). 이것의 문제는 아무도 매개변수로 구분하지 않더라도 Print가 여러 매개변수를 가질 수 있다는 것입니다. 단지 쉼표로 구분된 문자열입니다. 따라서 표준 Print 함수를 대체하려면 Print() 함수에 완전히 대응하기 위해 64개의 선택적 매개변수를 취하는 함수가 필요합니다. 그리고 로그 앞에 데이터를 추가하려면 이것이 필요합니다. 더 잘 보기 위해 화살표(==>)가 있는 스트립, 행 번호, 날짜, 파일로 출력할 수 있습니다. 이 작업의 속도는 다른 사람을 전혀 흥분시킬 수 없습니다. 이것은 특히 오류를 찾는 것이 어려운 경우에 수행되고 제거되기 때문입니다.

 
string _info;
void _Print( string s, string s1= "" , string s2= "" , string s3= "" , string s4= "" , string s5= "" , string s6= "" , string s7= "" , string s8= "" )//.....
   {
   string ss;
   StringConcatenate (ss,s,s1,s2,s3,s4,s5,s6,s7,s8);//....
   //Comment(_info,ss);
   Print (_info,ss);
   }
#define Print _info= __FILE__ + " line " + __LINE__ + " " + __FUNCSIG__ + " Print: " ; _Print

void OnStart ()
  {
   
   Templ();
  }
  
void Templ()
   {
   Print ( "Error, a!=" , 5 , " and other...." , 3 , 4 , 5 );
   Print ( "a=" , 5 );
   Print ( "Hi" );
   }


다들 이해가 가는듯...

이제 막 여행을 시작하는 분들을 위해....

여전히 stat 클래스로 래핑하고 나머지를 동일시하는 링크를 반환할 수 있습니다. 이 메소드는 if (a!=5) Print (a); 이것은 작동하지 않을 것입니다 . if (a!=5) {Print(a);}를 작성해야 합니다. 수업에서 이 순간을 수정할 수 있지만 게으름)) 그러나 일반적으로 모든 것이 역사 기록 보관소에 있는 것 같습니다.

클래스를 사용하여 정적 메서드를 통해 데이터를 초기화하고 print 호출을 연산자와 결합하는 방식 .... then if (a!=5) Print(a); , 작동합니다