오류, 버그, 질문 - 페이지 2865 1...285828592860286128622863286428652866286728682869287028712872...3184 새 코멘트 Vladimir Pastushak 2020.10.05 14:42 #28641 시장을 위해 새 제품을 만드는 것은 불가능하며 오류 500을 씁니다. 제품이 만들어지고 검사를 통과했다고 개인 계정에 게시되었다고 나와 있지만 링크를 클릭하면 500 응답을 받습니다. Andrey Khatimlianskii 2020.10.05 14:49 #28642 fxsaber : 텍스트 교체처럼 하향식으로 작동합니다. 저것들. "TMP"는 "VALUE"로 대체됩니다. 블라디미르 시마코프 : 컴파일러가 아닙니다 - 전처리기입니다) 로 변하다 , VALUE이(가) 정의되지 않았습니다. 그리고 unef는 어떻게 작동해야 합니까? fxsaber 2020.10.05 14:50 #28643 Andrey Khatimlianskii : 그리고 unef는 어떻게 작동해야 합니까? 이 시점까지 "텍스트 교체"가 있습니다. Valeriy Yastremskiy 2020.10.05 15:25 #28644 Vladimir Simakov : 컴파일러가 아닙니다 - 전처리기입니다) 로 변하다 , VALUE이(가) 정의되지 않았습니다. #define VALUE (VALUE* 2 ) 값 유형 VALUE * 2가 const이고 대체 자체에 연결되어 있음을 올바르게 이해합니다. VALUE도 상수입니다. 컴파일러는 두 개의 상수를 만듭니다. 그렇다면 아마도 새로운 대체물을 생성할 것입니다. #define VALUE1 (VALUE* 2 ) #define VALUE VALUE1 그리고 VALUE가 코드에서 위의 상수로 정의된 경우 올바르지 않습니다. Andrey Khatimlianskii 2020.10.05 15:33 #28645 fxsaber : 이 시점까지 "텍스트 교체"가 있습니다. 수렴하지 않고 TMP를 VALUE 로 변경 뒤에 있는 "#define VALUE (TMP*2)" 줄에서. fxsaber 2020.10.05 15:58 #28646 Andrey Khatimlianskii : 수렴하지 않고 TMP를 VALUE 로 변경 뒤에 있는 "#define VALUE (TMP*2)" 줄에서. #define MACROS TEXT // В этом интервале везде идет замена в исходнике MACROS на TEXT, как делалось бы в текстовом редакторе. #undef MACROS 따라서 모든 것이 소진될 때까지 교체가 계속됩니다. Andrey Khatimlianskii 2020.10.05 17:45 #28647 fxsaber : 따라서 모든 것이 소진될 때까지 교체가 계속됩니다. 코드가 있습니다: #define VALUE 10 // #define TMP VALUE // #undef VALUE // #define VALUE (TMP* 2 ) // 첫 번째 대체는 #undef VALUE까지 코드 전체에서 VALUE를 10으로 변경하고 다음과 같이 남습니다. #define TMP 10 #define VALUE (TMP* 2 ) 다음 교체는 TMP를 10으로 변경합니다. #define VALUE ( 10 * 2 ) 내가 어디 바보입니까? Vladimir Simakov 2020.10.05 17:56 #28648 Andrey Khatimlianskii : 코드가 있습니다: 첫 번째 대체는 #undef VALUE까지 코드 전체에서 VALUE를 10으로 변경하고 다음과 같이 남습니다. 다음 교체는 TMP를 10으로 변경합니다. 내가 어디 바보입니까? TMP 대신 10이 아닌 VALUE로 대체되지만 VALUE가 정의되면(여기에 매복이 있음) 이미 10 단계별 참조: #define VALUE 10 #define TMP VALUE #undef VALUE #define VALUE (TMP* 2 ) void OnStart ( void ) { Print (VALUE) } 전처리기는 Print 내부에서 정직하게 대체합니다. Print ((TMP* 2 )); , 그 후에 다시 속임수가 없는 모든 것이 TMP 대신 무엇을 대체합니까? 바르게: Print ((VALUE* 2 )); , 그 후에 모든 전처리기 지시문을 지우고 그 후에야 컴파일러에 전달됩니다. void OnStart ( void ) { Print ((VALUE* 2 )); } Andrey Khatimlianskii 2020.10.05 18:41 #28649 Vladimir Simakov : TMP 대신 10이 아닌 VALUE로 대체되지만 VALUE가 정의되면(여기에 매복이 있음) 이미 10 단계별 참조: 전처리기는 Print 내부에서 정직하게 대체합니다. , 그 후에 다시 속임수가 없는 모든 것이 TMP 대신 무엇을 대체합니까? 바르게: , 그 후에 모든 전처리기 지시문을 지우고 그 후에야 컴파일러에 전달됩니다. 하향식이라고 하지 않습니다. Vladimir Simakov 2020.10.05 18:51 #28650 Andrey Khatimlianskii : 하향식이라고 하지 않습니다. 죄송합니다. 설명하려고 하는 동안 혼란스러워했습니다. 다시: #define VALUE 10 #define TMP VALUE #undef VALUE #define VALUE (TMP* 2 ) VALUE의 두 번째 정의 시 매크로 VALUE가 정의되지 않았으므로 VALUE는 다음과 같이 정의됩니다. (VALUE* 2 ) , TMP는 이전에도 여전히 VALUE로 정의되어 있기 때문입니다. 그러나 TMP는 VALUE의 두 번째 정의 이후에 이미 (TMP* 2 ) 이 같은)) 전처리기에서 정확히 무엇이 존재하는지 대체되며 그것이 어떻게 존재하고 어디에 정의되어 있는지는 중요하지 않습니다. 따라서 조심해야 합니다. 예시: #define min(A,B) ((A)<(B)?(A):(B)) long Foo( int x) { return x*x;} void OnStart ( void ) { int a= 500 , b= 20 ; Print (min( 500 ,Foo(b))); //400 } , 그리고 이제 함수에 악, 즉 부작용을 추가해 보겠습니다. #define min(A,B) ((A)<(B)?(A):(B)) long Foo( int x){ Print ( "Увидивший это второй раз - нубяра vulgaris" ); return x*x;} void OnStart ( void ) { int a= 500 , b= 20 ; Print (min( 500 ,Foo(b))); } 그리고 이것은 단지 비문이지만 보증금이이 기능에 의존한다면 어떻게 될까요? 1...285828592860286128622863286428652866286728682869287028712872...3184 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
시장을 위해 새 제품을 만드는 것은 불가능하며 오류 500을 씁니다.
제품이 만들어지고 검사를 통과했다고 개인 계정에 게시되었다고 나와 있지만 링크를 클릭하면 500 응답을 받습니다.
텍스트 교체처럼 하향식으로 작동합니다. 저것들. "TMP"는 "VALUE"로 대체됩니다.
컴파일러가 아닙니다 - 전처리기입니다)
로 변하다
, VALUE이(가) 정의되지 않았습니다.
그리고 unef는 어떻게 작동해야 합니까?
그리고 unef는 어떻게 작동해야 합니까?
이 시점까지 "텍스트 교체"가 있습니다.
컴파일러가 아닙니다 - 전처리기입니다)
로 변하다
, VALUE이(가) 정의되지 않았습니다.
값 유형 VALUE * 2가 const이고 대체 자체에 연결되어 있음을 올바르게 이해합니다. VALUE도 상수입니다. 컴파일러는 두 개의 상수를 만듭니다.
그렇다면 아마도 새로운 대체물을 생성할 것입니다.
#define VALUE VALUE1그리고 VALUE가 코드에서 위의 상수로 정의된 경우 올바르지 않습니다.
이 시점까지 "텍스트 교체"가 있습니다.
수렴하지 않고 TMP를 VALUE 로 변경 뒤에 있는 "#define VALUE (TMP*2)" 줄에서.
수렴하지 않고 TMP를 VALUE 로 변경 뒤에 있는 "#define VALUE (TMP*2)" 줄에서.
따라서 모든 것이 소진될 때까지 교체가 계속됩니다.
코드가 있습니다:
첫 번째 대체는 #undef VALUE까지 코드 전체에서 VALUE를 10으로 변경하고 다음과 같이 남습니다.
다음 교체는 TMP를 10으로 변경합니다.
내가 어디 바보입니까?
코드가 있습니다:
첫 번째 대체는 #undef VALUE까지 코드 전체에서 VALUE를 10으로 변경하고 다음과 같이 남습니다.
다음 교체는 TMP를 10으로 변경합니다.
내가 어디 바보입니까?
TMP 대신 10이 아닌 VALUE로 대체되지만 VALUE가 정의되면(여기에 매복이 있음) 이미 10
단계별 참조:
전처리기는 Print 내부에서 정직하게 대체합니다.
, 그 후에 다시 속임수가 없는 모든 것이 TMP 대신 무엇을 대체합니까? 바르게:
, 그 후에 모든 전처리기 지시문을 지우고 그 후에야 컴파일러에 전달됩니다.
TMP 대신 10이 아닌 VALUE로 대체되지만 VALUE가 정의되면(여기에 매복이 있음) 이미 10
단계별 참조:
전처리기는 Print 내부에서 정직하게 대체합니다.
, 그 후에 다시 속임수가 없는 모든 것이 TMP 대신 무엇을 대체합니까? 바르게:
, 그 후에 모든 전처리기 지시문을 지우고 그 후에야 컴파일러에 전달됩니다.
하향식이라고 하지 않습니다.
하향식이라고 하지 않습니다.
죄송합니다. 설명하려고 하는 동안 혼란스러워했습니다.
다시:
VALUE의 두 번째 정의 시 매크로 VALUE가 정의되지 않았으므로 VALUE는 다음과 같이 정의됩니다.
(VALUE* 2 ), TMP는 이전에도 여전히 VALUE로 정의되어 있기 때문입니다.
그러나 TMP는 VALUE의 두 번째 정의 이후에 이미
(TMP* 2 )이 같은))
전처리기에서 정확히 무엇이 존재하는지 대체되며 그것이 어떻게 존재하고 어디에 정의되어 있는지는 중요하지 않습니다. 따라서 조심해야 합니다. 예시:
, 그리고 이제 함수에 악, 즉 부작용을 추가해 보겠습니다.
그리고 이것은 단지 비문이지만 보증금이이 기능에 의존한다면 어떻게 될까요?