«language-lawyer» 태그된 질문

프로그래밍 언어 및 환경의 공식 또는 권위있는 사양의 복잡성에 대한 질문

4
memcpy (0,0,0)을 수행하는 것이 안전합니까?
나는 C 표준에 익숙하지 않으니 참아주세요. 그것이 memcpy(0,0,0)안전하다고 표준에 의해 보장되는지 알고 싶습니다 . 내가 찾을 수있는 유일한 제한은 메모리 영역이 겹치면 동작이 정의되지 않는다는 것입니다. 그러나 여기서 메모리 영역이 겹친다 고 생각할 수 있습니까?


1
019가 JavaScript 구문 오류가 아닌 이유는 무엇입니까? 또는 019> 020 인 이유
019 > 020JavaScript 콘솔 (Chrome과 Firefox에서 테스트 됨)에 입력 하면 대답을 얻습니다 true. 이것은 때문이다 020으로 해석되고 OctalIntegerLiteral(등호 16반면에) 019분명히으로 해석되고있다 DecimalLiteral(와 동일 19). 으로 19보다 큰 16, 019 > 020이다 true. 나를 당혹스럽게 019하는 DecimalLiteral것은 처음으로 해석되는 이유 입니다 . 어떤 생산입니까? DecimalIntegerLiteral허용하지 않음 019: DecimalIntegerLiteral :: 0 NonZeroDigit …



7
NULL 값을 0으로 대체 할 수 있습니까?
? NULL값의 대체물로 포인터 를 사용할 수 0있습니까? 아니면 그 일에 잘못된 것이 있습니까? 예를 들어, int i = NULL; 대체품 : int i = 0; 실험으로 다음 코드를 컴파일했습니다. #include <stdio.h> int main(void) { int i = NULL; printf("%d",i); return 0; } 산출: 0 실제로 그것은 나에게 완전히 정확한 …


3
std :: vector (ab)는 자동 저장을 사용합니다
다음 스 니펫을 고려하십시오. #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } 기본 스택 크기는 일반적으로 20MB보다 작기 때문에 대부분의 플랫폼에서 충돌이 발생합니다. 이제 다음 코드를 고려하십시오. #include <array> #include <vector> int main() { using huge_type = std::array<char, 20*1024*1024>; std::vector<huge_type> v(1); } 놀랍게도 충돌합니다! 역 …


3
C ++ 선언과 괄호-왜?
주제는 이전 에 논의 되었지만 중복 된 것은 아닙니다. 누군가 decltype(a)와와 의 차이점에 대해 물을 때 decltype((a))일반적인 대답은 a변수 (a)입니다. 이 답변이 만족스럽지 않습니다. 먼저 a표현도 있습니다. 기본 표현식 의 옵션 에는 다음이 포함됩니다. ( 표현 ) 아이디 표현 더 중요한 것은 decltype에 대한 문구는 괄호를 매우 명확하게 고려한다는 것입니다 …

6
2 바이트를 부호있는 16 비트 정수로 변환하는 올바른 방법은 무엇입니까?
에서 이 답변 , zwol는 이 주장을했다 : 2 바이트의 데이터를 외부 소스에서 16 비트 부호있는 정수로 변환하는 올바른 방법은 다음과 같은 도우미 기능을 사용하는 것입니다. #include <stdint.h> int16_t be16_to_cpu_signed(const uint8_t data[static 2]) { uint32_t val = (((uint32_t)data[0]) << 8) | (((uint32_t)data[1]) << 0); return ((int32_t) val) - 0x10000u; } …

2
std :: hash가 결정적이라고 보장되지 않는 이유는 무엇입니까?
이하에서는 N4140 (C ++ 14 표준)을 사용합니다. 에 따르면 17.6.3.4 해시 요구 사항을 § , 반환 된 값 k 은 프로그램 기간 동안의 인수에만 의존해야 합니다 . [참고 : 따라서 h(k)동일한 값을 가진 표현식의 모든 평가 는 주어진 프로그램 실행에 대해k 동일한 결과 를 산출합니다 . — 끝 참고] 및 …

2
C의 BNF 문법이 빈 init-declarator 시퀀스를 가진 선언을 허용하는 이유는 무엇입니까?
C의 BNF 문법을 살펴볼 때 선언의 생산 규칙이 다음과 같이 이상하다고 생각했습니다 ( https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of% 20C % 20in % 20Backus-Naur % 20form.htm ) : <declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ; ?에 대해 *수량자를 사용하는 이유 (0 번 이상 발생) init-declarator? 이는 의미 상 유효하지 않지만 구문 과 같은 int;또는 void;구문이 유효한 구문을 …

1
클래스가 자체 정적 정적 constexpr 메소드에 액세스 할 수 없습니다-Clang bug?
이 코드는 Clang (6,7,8,9, 트렁크)에서 컴파일되지 않지만 GCC (7.1, 8.1, 9.1)에서는 잘 컴파일됩니다. template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; } else { return TypeHolder<T>{}; } …

2
2 차원 배열 앨리어싱시 예기치 않은 strlen 최적화
내 코드는 다음과 같습니다. #include <string.h> #include <stdio.h> typedef char BUF[8]; typedef struct { BUF b[23]; } S; S s; int main() { int n; memcpy(&s, "1234567812345678", 17); n = strlen((char *)&s.b) / sizeof(BUF); printf("%d\n", n); n = strlen((char *)&s) / sizeof(BUF); printf("%d\n", n); } 를 제외한 모든 최적화 수준에서 …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.