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

 
Alexey Navoykov :

컴파일되지 않는 것으로 알고 있습니다. 우리는 구문 검사(ME에서는 "컴파일"이라고도 함)에 대해 이야기하고 있습니다. 지난 게시물에서 대괄호로 이것을 지정했기 때문입니다. C++ 컴파일러도 구문 검사(일반적으로 명령줄을 통해)를 실행하면 예쁜 것처럼 맹세할 것입니다.

지정되지 않은 경우 확인:

B b;

그런 다음 C++는 이 코드를 잘 컴파일합니다. 따라서 구문이 정확합니다. 문제는 클래스 개체가 할당되는 개체 수준에서 시작됩니다.

헤더에서 사용하기 위해 실제로 확인하지 않는 템플릿을 상상해 보십시오. 이 경우 컴파일러는 무엇을 해야 합니까? 또는 구조체에 대해 std:lower를 구현해야 하고 *.h에 구현이 없다고 가정해 봅시다. 또한 컴파일러는 검증 단계에서 맹세해서는 안 됩니다.

이 코드에서 맹세하기 위해 명령줄에서 *.h 구문을 확인하는 방법을 명확히 할 수 있습니까? 흥미로워졌다)

 
Andrey Pogoreltsev :

지정되지 않은 경우 확인:

그런 다음 C++는 이 코드를 잘 컴파일합니다. 따라서 구문이 정확합니다.

당신의 논리는 흥미롭습니다) 그리고 모든 코드를 삭제하면 구문이 훨씬 더 정확합니까? ) 특정 코드를 주었습니다. B급이 틀렸다는 이야기는 없었다. 정적 메서드 등을 호출하는 데 사용할 수 있습니다.

헤더에서 사용하기 위해 실제로 확인하지 않는 템플릿을 상상해 보십시오. 이 경우 컴파일러는 무엇을 해야 합니까?

개념을 바꾸지 마십시오. 템플릿은 구체적인 유형으로 확장되는 순간에만 확인되므로 이해할 수 있습니다.

이 코드에서 맹세하기 위해 명령줄에서 *.h 구문을 확인하는 방법을 명확히 할 수 있습니까? 흥미로워졌다)

여기에서 나는 당신에게 말하지 않을 것입니다. 나는 그런 탬버린에 신경 쓰지 않았지만 헤더를 컴파일하는 VS용 매크로를 직접 작성했습니다. 이를 위해 현재 문서 모드를 즉석에서 cpp로 전환하고 컴파일한 다음 다시 반환합니다. 간단하고 맛있습니다.

왜 스튜디오에 헤더 구문을 확인하는 일반적인 일반 옵션이 없는지 전혀 이해가 되지 않습니다. 사실, 나는 다소 오래된 버전을 사용합니다. 아마도 이것이 이미 나타났을 것입니다.

 
Alexey Navoykov :

왜 스튜디오에 헤더 구문을 확인하는 일반적인 일반 옵션이 없는지 전혀 이해가 되지 않습니다.

Ctrl+F7 , 이 조합은 아마도 적어도 2008 studio에서 시작될 것입니다. 별도의 파일을 컴파일하십시오.
 
TheXpert :
Ctrl+F7 , 이 조합은 아마도 적어도 2008 studio에서 시작될 것입니다. 별도의 파일을 컴파일하십시오.
헤더에 관한 것이었습니다. 그리고 이 조합은 cpp를 나타냅니다. 적어도 제 2010년 스튜디오에서는 그렇습니다.
 

포스팅하기 전에 한참을 망설이고 내 공예품을 다시 확인했지만 여전히 테스터에 뭔가 문제가 있습니다 ...

테스트는 처음에 말 그대로 중단되었습니다.

아무 것도 변경하지 않고 "시작"을 두 번째로 누르면 끝으로 이동합니다(중단된 위치에서 잠시 멈춤).

나는 몇 가지 접근 방식을 더 수행했습니다. 결과는 엄격하게 번갈아 나타납니다(하나씩, 짝수/홀수). "중단" 위치까지 균형 그래프는 유사합니다. 반복합니다. 아무 것도 변경하지 않고 "시작"을 클릭합니다.

아마도 이것은 다른 문자를 추가하는 순간일 것입니다(테스트 시작부터 5개 모두가 아닌 이유는 무엇입니까?):


메모리의 실제 가용성에 대한 질문은 제쳐두고(작업 관리자에 따르면 여유 1.2-1.4GB, 즉 메시지와 일치함) 동일한 테스트를 실행하는 데 서로 다른 양의 메모리가 필요하지 않을까요? 그리고 보고서에 따르면 400MB가 충분하면 1.2GB에서 이러한 테스트를 세 번 실행할 수 있습니다.

추가 데이터: 2004년 H1, 2004년...오늘 막대 시작 시 5개 기호에 대한 테스트. 본문에는 500개 요소로 구성된 7개의 이중 배열과 하나의 작은 배열 구조(각 문자에 대한 데이터 저장, 즉 이 경우 5 x 13)가 포함되어 있으며 크기는 초기화 중에 설정되며 더 이상 변경되지 않습니다. 단순히 기억을 삼킬 것이 없습니다. 코드는 절차적이고 단순하며 재귀 및 플러그인 라이브러리가 없습니다.

4명의 캐릭터에서 - 6-7-8에서 - 5에서와 같은 이야기 - 시간을 통해 작동합니다. 이 경우 새 기호를 추가한 후 처음 - 항상 통과, 다음 - 아니요, 다시 통과 등입니다.

메모리가 적시에 해제되지 않고 메모리 부족과 관련된 오류가 있다는 의혹이 있습니다.

총 3문제:

  • 설정이나 코드가 변경되지 않은 상태에서 두 번(엄격하게) 테스트를 통과합니다.
  • 여러 테스트를 위한 충분한 여유 메모리가 있지만(성공한 통과 후 메시지에 따라) 메모리 부족에 대한 오류가 있습니다(시도에도). ("성공" 시 400이 사용되었고 오류 시 1200이 비어 있음)
  • 히스토리가 있는 경우 일부 문자는 테스트 중간에 연결됩니다(동기화 로그에서 볼 수 있음). 모든 기호의 새 막대 각각에 대한 신호 폴링(루프 내)

 
Alexey Navoykov :
헤더에 관한 것이었습니다. 그리고 이 조합은 cpp를 나타냅니다. 적어도 제 2010년 스튜디오에서는 그렇습니다.
예 (그리고 당신의 방법은 헤더에 대해 빈 cpp를 수행하는 것보다 더 편리한 것 같습니다
 

금지된 이유는 무엇입니까?

 void fn( const int &) {}

void start() {
   fn( 5 );   // parameter passed as reference, variable expected

}
 
Vict :

금지된 이유는 무엇입니까?

고대부터 그랬습니다. 값으로만 리터럴. 왜 - x, 개발자에게 물어봐야합니다.
 
TheXpert :
고대부터 그랬습니다. 값으로만 리터럴. 왜 - x, 개발자에게 물어봐야합니다.

참조로 매개변수를 전달하면 메모리에 할당된 변수가 있다고 가정합니다.

상수는 어디에도 저장되지 않고 직접 사용됩니다.

 
TheXpert :
고대부터 그랬습니다. 값으로만 리터럴. 왜 - x, 개발자에게 물어봐야합니다.

마조히스트를 위해. 표준 라이브러리는 인상적이지 않았고 벡터와 비슷한 것을 작성하기로 결정했지만 "칩"이 많기 때문에 결함이 하나 더 있습니다.

 void push_back( const T & value );
사유: