I came across 다음 코드 줄은 무엇이며 어떻게 처리되는지 알 수 없습니다.C에서 'switch 0'구문의 목적은 무엇입니까?
#define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0)
switch (0)
부분의 기능은 무엇입니까? 0
이 false
과 같다고 가정하면 switch 문을 입력하지 않는다는 의미입니까?
또한 case (a)
행의 경우 알 수없는 a
변수를 사례로 제공 할 수 있습니까?
이것은 'a'가 컴파일 타임 상수인지 확인하는 것입니다. 'b'도 사용되지 않습니다. 확장 된 코드는 실제로 아무 것도하지 않고 넘어집니다. 'switch (0)'는'switch (100)'또는 다른 어떤 값과 다르지 않다. 'case 0'으로 분기하고 거기에서부터 실행이 계속됩니다. 'a'는 변수가 아니어야합니다. 매크로에 전달하는 것은 무엇이든합니다. 상수 여야합니다. 변수를 전달하면 컴파일 타임 오류가 발생합니다. –
['static_assert'] (https://stackoverflow.com/q/1647895/995714) 여기에 의도와 용도가 다르지만 그 이름이 좋은 선택이 아니더라도 약간의 힌트를 줄 수 있습니다. –
표준 구현으로 불완전합니다 'static_assert'는 함수 밖에서 작동하지 않으므로 –