C 38

gcc 표준 헤더에 괄호가 너무 많습니다.

gcc 표준 헤더에 괄호가 너무 많습니다. GCC 헤더 파일의 상수 표현식이 괄호로 둘러싸인 이유는 무엇입니까? #define INTMAX_MIN (-9223372036854775807LL) #define INTMAX_MAX (9223372036854775807LL) 이런 식으로 괄호를 생략하면 무엇이 달라질까요? #define INTMAX_MIN -9223372036854775807LL #define INTMAX_MAX 9223372036854775807LL 그리고 왜 'L' 접미사가 있죠?제가 다음과 같이 적어도 똑같을까요? #define INTMAX_MIN -9223372036854775807 #define INTMAX_MAX 9223372036854775807 실제 유용성이 있습니까, 아니면 항상..

programing 2023.07.08

alloca()는 메모리 레벨에서 어떻게 작동합니까?

alloca()는 메모리 레벨에서 어떻게 작동합니까? 어떻게 해야 할지 생각 중입니다alloca()실제로 메모리 레벨에서 작동합니다.리눅스 man 페이지에서: alloca() 함수는 호출자의 스택 프레임에 공간 크기 바이트를 할당합니다.alloca()를 호출한 함수가 호출자에게 돌아오면 이 임시 공간이 자동으로 해제됩니다. 이것이 의미하는 것은alloca()스택 포인터를 다음으로 전달합니다.n바이트? 아니면 새로 생성된 메모리가 정확히 어디에 할당되어 있습니까? 그리고 이것은 가변 길이 배열과 정확히 동일하지 않습니까? 구현 세부 사항은 아마도 OS 등에 맡겨져 있을 것으로 알고 있습니다.하지만 저는 일반적으로 이것이 어떻게 이루어지는지 알고 싶습니다.네.alloca는 기능적으로 로컬 변수 길이 배열과 ..

programing 2023.06.23

유닉스에서 읽기와 읽기의 차이점은 무엇입니까?

유닉스에서 읽기와 읽기의 차이점은 무엇입니까? 기능 간의 차이점은 무엇입니까?read()그리고.pread()유닉스에서? 그 중에서 선택할 때, 어떤 점을 고려해야 합니까? 나는 그들 사이의 차이점을 검색했지만 결과가 없었습니다.Pread()는 read()와 동일하게 작동하지만 파일 포인터를 수정하지 않고 파일의 지정된 위치에서 읽습니다. 검색() 호출을 저장하기 위해 파일의 개별 레코드를 가리키는 데이터베이스 색인과 같이 고정 오프셋에서 데이터를 반복적으로 읽어야 할 때 사용합니다. 기본적으로 데이터가 순차적인 경우 read()를 사용하고, 알고 있거나 읽을 오프셋을 계산할 수 있는 경우 pread()를 사용합니다. 이 링크에서 pread의 원자성은 파일 설명자를 공유하는 프로세스 또는 스레드가 별도의 ..

programing 2023.06.18

포인터 선언에 데이터 유형이 필요한 이유는 무엇입니까?

포인터 선언에 데이터 유형이 필요한 이유는 무엇입니까? 변수를 선언하면서 C/C++의 데이터 유형에 대해 알고 있는 바로는, 데이터 유형을 선언해야 합니다. 그러면 컴파일러가 메모리의 바이트 수를 그에 따라 예약하도록 합니다. 그러나 포인터의 경우 포인터가 메모리 주소를 부호 없는 정수로 저장하고 있기 때문에 포인터가 가리키는 변수의 데이터 유형에 관계없이 크기가 일정하다는 것을 알고 있습니다(예: "터보 컴파일러"에서 2바이트). 제 질문은 포인터가 항상 일정한 크기(바이트 단위)라면 데이터 유형을 언급하면서 선언할 필요가 무엇입니까?포인터에 대한 제 이해가 잘못된 건가요?포인터가 읽어야 할 데이터 양을 알 수 있도록 포인터를 참조 해제할 때 데이터 유형이 필요합니다.예를 들어 참조 해제 achar포인..

programing 2023.06.18

크기가 0인 배열

크기가 0인 배열 이 질문에는 이미 다음과 같은 답이 있습니다. C/C++에서 0 크기 배열을 정의하면 어떻게 됩니까? (8개 답변) 마감됨2년 전에. 오늘 우연히 1차원의 크기가 0인 2차원 배열을 정의했지만 컴파일러는 불평하지 않았습니다.저는 적어도 gcc의 경우 이것이 합법적이라고 명시하는 다음을 찾았습니다. 6.17 길이 0의 배열 그러나 이 사용법에 대해 두 가지 질문이 있습니다. 첫째, 이것이 좋은 프로그래밍 관행으로 간주됩니까?만약 그렇다면, 우리는 현실 세계에서 언제 그것을 사용해야 합니까? 두 번째로, 제가 정의한 배열은 2차원이었고, 1차원에 대한 크기는 0이었습니다.이것이 1차원 케이스와 동일합니까?예를들면, int s[0] int s[0][100] int s[100][0] 메모리와 ..

programing 2023.06.18

mmap()이 순차 IO보다 빠른 이유는 무엇입니까?

mmap()이 순차 IO보다 빠른 이유는 무엇입니까? 이 질문에는 이미 다음과 같은 답이 있습니다. 마감됨11년 전에. 중복 가능성: mmap() 대 판독 블록 저는 (어디선가 인터넷에서) 그것을 읽었다고 들었습니다.mmap()순차 IO보다 빠릅니다.이거 맞는건가요?만약 그렇다면 왜 그것이 더 빠릅니까? mmap()순차적으로 읽지 않습니다. mmap()에서 디크자체와동일가져합와니야다게하와 .read() 일다 매핑된 영역이 순차적이 아니므로 DMA(?)가 없습니다. 그렇게mmap()는 실로는보느합야니다려다제▁than합▁actually보다 느려야 합니다.read() 파일에서?위의 제 가정 중 틀린 것은 무엇입니까? 저는 mmap()이 순차 IO보다 빠르다고 들었습니다(어디선가 인터넷에서 읽었습니다)이거 맞는..

programing 2023.06.18

Unix/Linux에서 Windows 파일 시간을 두 번째로 변환

Unix/Linux에서 Windows 파일 시간을 두 번째로 변환 각 트랜잭션 시간이 Windows 파일 시간 형식으로 표시된 추적 파일이 있습니다.다음 시간 숫자는 다음과 같습니다. 128166372003061629 128166372016382155 128166372026382245 이 숫자들에서 실제 시간(특히 두 번째)을 추출할 수 있는 C/C++ 라이브러리가 유닉스/리눅스에 있는지 알려주시겠습니까?제가 직접 추출 기능을 써도 될까요?매우 간단합니다. Windows 시대는 1601-01-01T00:00Z로 시작합니다.UNIX/Linux 시대(1970-01-01T00:00:00Z)보다 1,64473600초 전입니다.Windows 눈금은 100나노초입니다.따라서 UNIX epoch에서 초를 가져오는 함..

programing 2023.06.13

문자를 빼는 동작이 구체적인 이유는 무엇입니까?

문자를 빼는 동작이 구체적인 이유는 무엇입니까? 다음 문장: if('z' - 'a' == 25) 동일한 방식으로 평가하는 것이 보장되지 않습니다.컴파일러에 종속되어 있습니다.또한 다음과 같은 방식으로 평가되지는 않습니다. #if 'z' - 'a' == 25 프리프로세서와 컴파일러가 모두 동일한 시스템에서 실행되는 경우에도 마찬가지입니다.왜 그런 것일까요?OP는 표준의 직접 인용문 N1570 § 6.10.1p3,4 + 각주 168: 제어 상수 표현식은 6.6의 규칙에 따라 평가됩니다.여기에는 이스케이프 시퀀스를 실행 문자 집합 멤버로 변환하는 것이 포함될 수 있는 문자 상수 해석이 포함됩니다.이러한 문자 상수의 숫자 값이 식에서 동일한 문자 상수가 발생할 때 얻은 값과 일치하는지 여부(#if 또는 #eli..

programing 2023.06.13