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

 

실행 시 이중 오류

 #define XY( X, Y )      X ##Y
#define f( X )  XY( g, X )
#define MACRO1( X )     #X
#define MACRO2( X )     MACRO1( X )
#define SIZE     5
void OnStart ()
{
     printf ( "%s", MACRO2( f( SIZE )));
}

결과: f(크기)

그러나 다음과 같아야 합니다. g5

 
leonerd :

테스트 시각화 차트에서 화살표를 제거하는 방법은 무엇입니까? 테스트를 시작했는데 마지막 테스트의 입력에서 여전히 화살표와 선이 있습니다.

tester.tpl 템플릿을 청소하십시오. 개체가 있을 가능성이 가장 높습니다.

 
A100 :

실행 시 이중 오류

결과: f(크기)

그러나 다음과 같아야 합니다. g5


논리적인 결과라고 생각합니다.

 
fxsaber :
논리적인 결과라고 생각합니다.

예상: 내부 SIZE 매크로의 첫 번째 대체, 중간 f( X ) 및 마지막으로 외부 MACRO2( X )

그러나 완료되지 않은 논리를 사용하더라도 결과는 다릅니다.

 #define MACRO1( X )     #X
void OnStart ()
{
     printf ( "%s" , MACRO1( f( SIZE )));
}
//Результат  :f(SIZE)
//должен быть:f( SIZE )

최소한 공간의 차이

 
A100 :

예상: 내부 매크로 SIZE의 첫 번째 대체, 중간 f( X ) 및 마지막으로 외부 MACRO2( X )

그러나 완료되지 않은 논리를 사용하더라도 결과는 다릅니다.

최소한 공간의 차이

물론 기능의 우선 순위는 내부에서 외부로입니다. 그러나 매크로는 반대입니다.

#X - 공백이 없는 문자열. 물론 여기에는 동의하지 않을 수 있습니다.

 
fxsaber :

물론 기능의 우선 순위는 내부에서 외부로입니다. 그러나 매크로는 반대입니다.

#X - 공백이 없는 문자열. 물론 여기에는 동의하지 않을 수 있습니다.

그리고 이미 그러한 지정을 가진 단순한 오래된 규칙이 있다면 오래된 지정으로 새로운 복잡한 규칙을 생각해 낸 이유는 무엇입니까? 규칙이 새로운 경우 지정은 새 것이어야 합니다.

 
A100 :

실행 시 이중 오류

결과: f(크기)

그러나 다음과 같아야 합니다. g5

1년 전에 서비스 데스크에 비슷한 요청을 보냈습니다(#1600034).   여전히 응답이 없습니다. 그들은 이 모든 "괴짜" 버그에 대해 신경 쓰지 않는 것 같습니다. 그리고 일반적으로 그들은 더 이상 언어를 개선할 의도가 없는 것 같습니다. 주요 버그만 지배하고 더 이상은 없습니다.
 
A100 :

그리고 이미 그러한 지정을 가진 단순한 오래된 규칙이 있다면 오래된 지정으로 새로운 복잡한 규칙을 생각해 낸 이유는 무엇입니까? 규칙이 새로운 경우 지정은 새 것이어야 합니다.

정확히 무엇에 대해 이야기하고 있습니까? 어떻게 되어야 할까요?

 
fxsaber :

정확히 무엇에 대해 이야기하고 있습니까? 어떻게 되어야 할까요?

#X - 있는 그대로의 문자열 - 즉 공백 포함(있는 경우). 그리고 f( SIZE ) -> g5 의 예를 참조하십시오. 나는 이러한 규칙을 스스로 생각해 낸 것이 아닙니다. 이것이 C ++ 컴파일러가 수행하는 방식입니다.

 
Alexey Navoykov :
1년 전에 서비스 데스크에 비슷한 요청을 보냈습니다(#1600034).   여전히 응답이 없습니다. 그들은 이 모든 "괴짜" 버그에 대해 신경 쓰지 않는 것 같습니다. 그리고 일반적으로 그들은 더 이상 언어를 개선할 의도가 없는 것 같습니다. 주요 버그만 지배하고 더 이상은 없습니다.

나는 어제 우연히 이것을 만났고 어떻게 결합했는지 놀랐습니다.

 template<typename T, int n>

수십 줄의 코드가 말 그대로 한두 줄(!) 그것이 내가 쓴 이유입니다. 언뜻보기에는 사소한 말도 안되는 것처럼 보일 수 있습니다. 다시 한 번 나는 C ++에 넌센스가 없다는 것을 확신했습니다.