템플릿 매개변수가 있는 컴파일러 버그 = void* - 페이지 15

 

여기, 제발, 당신은 "올바른" 정의를 가지고 있습니다. 왜냐하면 당신은 모든 것에 너무 많은 결함을 찾는 것을 좋아하기 때문입니다)))

 #define   POKE(t, i, b, n, v)     ( i & ((( ~ MASK( t, n )) << t( b )) | (( v & MASK( t, n )) << t( b ))))
 
Igor Makanu :

그들은 중복되지 않습니다! 그들은이 표현의 형성 논리를 읽는 데 도움이됩니다!

괄호의 수가 속도에 영향을 줍니까? - 글쎄, 타이핑 속도를 제외하고는 아무도 이것을 모니터링하지 않습니다 .... 인터넷에서 각 사용자가 하루에 스니치 한 부카프의 수가 생생한 예입니다)))

이는 향후 오류가 없고 빠른 개선을 보장합니다.

 
Dmitry Fedoseev :

이는 향후 오류가 없고 빠른 개선을 보장합니다.

여기! 최소한 누군가는 짧고 정형화된 글을 쓸 수 있습니다. 저는 항상 모든 것을 복잡하게 만들고 많은 편지를 씁니다... 앗, 다시 시작합니다)))

 
Ilya Malev :

여기, 제발, 당신은 "올바른" 정의를 가지고 있습니다. 왜냐하면 당신은 모든 것에 너무 많은 결함을 찾는 것을 좋아하기 때문입니다)))

추가 괄호의 쓸모없는 또 다른 예: 불필요한 괄호의 수를 쫓다가 필요한 괄호가 누락되었습니다.

 ( ( ~ MASK( ( t ) , ( n ) ) ) << t( b ) )
따라서 대괄호는 그러한 보증 을 제공하지 않지만 반대로 완화됩니다.
 

예, t와 n 주위의 괄호는 필요하지 않았습니다. 합성할 수 없었습니다. 좋아, 그런 술이 갔으니 이것을 분석하십시오)))

 #define B64(M,N)      (( N ) < 32                                                                                        \
                    ? (( N ) < 16                                                                                        \
                    ? (( N ) <   8                                                                                        \
                    ? (( N ) <   4                                                                                        \
                    ? (( N ) <   2                                                                                        \
                         ?                                                                                              \
                      (( N ) <   1 ? M ## 0    : M ## 1    )                                                                     \
                    : (( N ) <   3 ? M ## 2    : M ## 3    ))    : (( N ) <   6 ?                                                 \
                      (( N ) <   5 ? M ## 4    : M ## 5    )                                                                     \ 
                    : (( N ) <   7 ? M ## 6    : M ## 7    )))   : (( N ) < 12 ? (( N ) < 10 ?                                   \
                      (( N ) <   9 ? M ## 8    : M ## 9    )                                                                     \
                    : (( N ) < 11 ? M ## 10 : M ## 11 ))    : (( N ) < 14 ?                                                 \
                      (( N ) < 13 ? M ## 12 : M ## 13 )                                                                     \
                    : (( N ) < 15 ? M ## 14 : M ## 15 ))))  : (( N ) < 24 ? (( N ) < 20 ? (( N ) < 18 ?                     \
                      (( N ) < 17 ? M ## 16 : M ## 17 )                                                                     \
                    : (( N ) < 19 ? M ## 18 : M ## 19 ))    : (( N ) < 22 ?                                                 \
                      (( N ) < 21 ? M ## 20 : M ## 21 )                                                                     \
                    : (( N ) < 23 ? M ## 22 : M ## 23 )))   : (( N ) < 28 ? (( N ) < 26 ?                                   \
                      (( N ) < 25 ? M ## 24 : M ## 25 )                                                                     \
                    : (( N ) < 27 ? M ## 26 : M ## 27 ))    : (( N ) < 30 ?                                                 \
                      (( N ) < 29 ? M ## 28 : M ## 29 )                                                                     \
                    : (( N ) < 31 ? M ## 30 : M ## 31 ))))) : (( N ) < 48 ? (( N ) < 40 ? (( N ) < 36 ? (( N ) < 34 ?       \
                      (( N ) < 33 ? M ## 32 : M ## 33 )                                                                     \
                    : (( N ) < 35 ? M ## 34 : M ## 35 ))    : (( N ) < 38 ?                                                 \
                      (( N ) < 37 ? M ## 36 : M ## 37 )                                                                     \
                    : (( N ) < 39 ? M ## 38 : M ## 39 )))   : (( N ) < 44 ? (( N ) < 42 ?                                   \
                      (( N ) < 41 ? M ## 40 : M ## 41 )                                                                     \
                    : (( N ) < 43 ? M ## 42 : M ## 43 ))    : (( N ) < 46 ?                                                 \
                      (( N ) < 45 ? M ## 44 : M ## 45 )                                                                     \
                    : (( N ) < 47 ? M ## 46 : M ## 47 ))))  : (( N ) < 56 ? (( N ) < 52 ? (( N ) < 50 ?                     \
                      (( N ) < 49 ? M ## 48 : M ## 49 )                                                                     \
                    : (( N ) < 51 ? M ## 50 : M ## 51 ))    : (( N ) < 54 ?                                                 \ 
                      (( N ) < 53 ? M ## 52 : M ## 53 )                                                                     \
                    : (( N ) < 55 ? M ## 54 : M ## 55 )))   : (( N ) < 60 ? (( N ) < 58 ?                                   \
                      (( N ) < 57 ? M ## 56 : M ## 57 )                                                                     \
                    : (( N ) < 59 ? M ## 58 : M ## 59 ))    : (( N ) < 62 ?                                                 \
                      (( N ) < 61 ? M ## 60 : M ## 61 )                                                                     \
                    : (( N ) < 63 ? M ## 62 : M ## 63 ))))))  

그런 다음 나는 정말 슬프게도 ( long( 1 ) << N ) 2배 더 빠르게 작동하지만 그게 요점이 아님을 발견했습니다)

 
A100 :

추가 괄호의 쓸모없는 또 다른 예: 불필요한 괄호의 수를 쫓다가 필요한 괄호가 누락되었습니다.

당신이 거기에서 고통스럽게 많은 괄호를 "불필요한"이라고 표시한 것. 컴파일러가 욕을 시작하지 않도록 가능한 한 많은 대괄호를 제거하는 목표를 설정했다면 그 말이 맞을 수도 있지만 누군가가 처음에 가능한 한 명확하게 코드를 작성하려고 할 때 그러한 목표는 가치가 없습니다 그와 다른 사람들 모두에게 시력을 제공합니다(특히 편집기에서 짝을 이루는 괄호의 강조 표시를 고려함 ).

 
Ilya Malev :

이것을 분석))))

 void f()
{
        u long x = B64( , 3 ); //Error
}

컴파일하는 동안 오류가 발생했습니다. 무엇을 예상했습니까?

 
A100 :

컴파일하는 동안 오류가 발생했습니다. 무엇을 예상했습니까?

그것은 단지 아름다움을위한 것입니다, 나는 게시했습니다. 128개의 더 많은 정의가 이 정의에 첨부되어 작동하도록 하지만 분기의 독자를 아끼는 것이 좋습니다)))

 
Igor Makanu :

그들은 중복되지 않습니다! 그들은이 표현의 형성 논리를 읽는 데 도움이됩니다!

글쎄요, 그들이 당신을 도우면 하나님께서 당신을 축복하실 것입니다. 게시물의 유일한 연설은 "간결함 - 재능의 자매"에 관한 것이었습니다. 그래서 나는 이 진술이 어떻게 많은 중복 괄호와 결합될 수 있는지 묻습니다. 나는 그들이 논리를 이해하는 데 필요하지 않습니다. 내가 더 재능이 있다는 뜻인가요? )
 
Alexey Navoykov :
나는 그들이 논리를 이해하는 데 필요하지 않습니다. 내가 더 재능이 있다는 뜻인가요? )

숙련자를 상대로 한 또 다른 목표: 예, 우리는 엄청난 점수로 그들을 물리쳤습니다)