반응형

C 27

내 코드가 Windows로 컴파일되고 있는지 확인할 수 있는 매크로가 있습니까?

내 코드가 Windows로 컴파일되고 있는지 확인할 수 있는 매크로가 있습니까? 이 질문에는 이미 다음과 같은 답이 있습니다. Windows 및 Linux에서 C++ 컴파일: ifdef 스위치 (7개 답변) 마감됨9년 전에. 컴파일 중인 OS가 Windows인지 확인하고 싶습니다.확인할 수 있는 간단한 매크로가 있습니까?[편집: 컴파일 타임 매크로를 사용하여 현재 사용 중인 환경을 확인하고 싶다고 생각합니다.Windows(윈도우) 대신 Linux(리눅스) 아래의 Wine에서 실행 중인지 확인하고 싶을 수도 있지만 일반적으로 컴파일러는 특정 환경을 대상으로 하며 Windows(DOS) 또는 그렇지 않지만 둘 다 실행되는 경우는 거의 없습니다.] 일부 컴파일러는 Windows 빌드 환경을 나타내는 매크로를 ..

sourcecode 2023.07.27

C에서 인쇄 매크로 디버그?

C에서 인쇄 매크로 디버그? C에서 DEBUG 기호가 정의되었을 때만 인쇄되는 printf와 같은 매크로를 정의하는 적절한 방법은 무엇입니까? #ifdef DEBUG #define DEBUG_PRINT(???) ??? #else #define DEBUG_PRINT(???) ??? #endif 어디?무엇을 작성해야 할지 잘 모르는 부분입니다.나는 이 관용구를 꽤 많이 보았습니다. #ifdef DEBUG # define DEBUG_PRINT(x) printf x #else # define DEBUG_PRINT(x) do {} while (0) #endif 다음과 같이 사용: DEBUG_PRINT(("var1: %d; var2: %d; str: %s\n", var1, var2, str)); 일부 오래된 C 컴..

sourcecode 2023.07.22

"메모리가 8바이트 정렬"이라는 것은 무엇을 의미합니까?

"메모리가 8바이트 정렬"이라는 것은 무엇을 의미합니까? 한 프로젝트를 진행하면서 메모리 데이터가 "8바이트 정렬"되어 있는 것을 보았습니다.이것이 무엇을 의미하는지 설명해 줄 수 있는 사람이 있습니까?"8바이트 정렬"된 개체는 8의 배수인 메모리 주소에 저장됩니다. 대부분의 CPU는 정렬된 위치에서 일부 데이터 유형만 로드합니다. 다른 CPU에서는 이러한 액세스 속도가 더 빠릅니다.또한 메모리 정렬을 사용하는 데에는 몇 가지 다른 이유가 있을 수 있습니다. 코드를 보지 않으면 이유를 말하기가 어렵습니다. 메모리에 대한 외부 버스의 폭이 단일 바이트가 아니기 때문에 정렬된 액세스 속도가 더 빠릅니다. 일반적으로 4-8바이트(또는 더 넓음)입니다.이는 CPU가 한 번에 단일 바이트를 가져오지 않는다는 것을..

sourcecode 2023.07.07

비트 배열에 설정된 최상위 비트(맨 왼쪽) 찾기

비트 배열에 설정된 최상위 비트(맨 왼쪽) 찾기 0번째 인덱스는 배열의 첫 번째 바이트의 MSB이고, 8번째 인덱스는 두 번째 바이트의 MSB인 비트 배열 구현 등이 있습니다. 이 비트 배열에 설정된 첫 번째 비트를 찾는 빠른 방법은 무엇입니까?제가 찾아본 모든 관련 솔루션은 처음에 가장 중요하지 않은 부분을 찾지만, 저는 첫 번째 가장 중요한 부분이 필요합니다.그래서 0x00A1이 주어지면 8을 원합니다(왼쪽에서 9번째 비트이므로).GCC는 x86/x64의 BSR, ARM의 CLZ 등으로 변환하여 하드웨어가 구현하지 않으면 명령을 에뮬레이트합니다. Visual C++ 2005 이상 버전은 .tl:dr; 32비트의 경우 de Bruijn 곱셈을 사용합니다. 이것은 가장 빠른 휴대용 알고리즘입니다.이 스레..

sourcecode 2023.07.07

int가 짧고 잘린 경우 새 값은 어떻게 결정됩니까?

int가 짧고 잘린 경우 새 값은 어떻게 결정됩니까? 정수가 다음으로 캐스팅될 때 어떤 일이 일어나는지 누가 명확히 할 수 있습니까?short파이를 C로 요? 라즈베리 파이를 사용하고 있어요, 그래서 저는 알고 있습니다.int32비트이며, 32비트입니다.short16비트여야 합니다. 예를 들어 다음 C 코드를 사용한다고 가정합니다. int x = 0x1248642; short sx = (short)x; int y = sx; 난 그걸 이해해.x누가 어떻게 정확하게 설명할 수 있을까요?시프트를 사용합니까?숫자가 정확히 어떻게 32비트에서 16비트로 잘립니까?ISO C 표준에 따르면 정수를 서명된 유형으로 변환하고 값이 대상 유형의 범위를 벗어나면 결과가 구현 정의됩니다. (또는 구현 정의 신호를 올릴 수 있..

sourcecode 2023.07.02

유니온에서 현재 어떤 유형이 사용되고 있는지 어떻게 확인합니까?

유니온에서 현재 어떤 유형이 사용되고 있는지 어떻게 확인합니까? 우리에게 노조가 있다고 가정해 보겠습니다. typedef union someunion { int a; double b; } myunion; a=123과 같이 설정한 후 union에 어떤 유형이 있는지 확인할 수 있습니까?제 접근 방식은 이 유니언을 어떤 구조에 추가하고 유니언 유형을 int일 때는 1로, 더블일 때는 2로 설정하는 것입니다. typedef struct somestruct { int uniontype myunion numbers; } mystruct; 더 좋은 해결책이 없을까요? 더 좋은 해결책이 없을까요? 아니요, 당신이 보여준 솔루션이 가장 좋은 솔루션입니다. union는 매우 단순합니다. 사용자가 무엇에 할당했는지 "추적..

sourcecode 2023.07.02

C와 C++의 표준 헤더 파일 목록

C와 C++의 표준 헤더 파일 목록 C와 C++의 모든 헤더 파일 목록은 어디에서 찾을 수 있습니까? 라이브러리를 구축하는 동안 '와 같은 오류가 발생합니다.tree.h not found이것은 C와 C++의 표준 헤더 파일인 것 같습니다.이것은 저에게 모든 헤더 파일과 그들의 기여를 알고 싶은 호기심을 불러일으켰습니다. 제가 검색할 수 있는 곳이 있나요? 저는 Solaris Unix에서 일하고 있습니다.머리글 '트리'입니다.h'는 어디에서도 표준이 아닙니다. C 표준 ISO/IEC 9899:1990 (C89, C90) C89의 15개 표준 헤더는 다음과 같습니다. ISO/IEC 9899:1990/Amd.1:1995 C94*(개정판 1)에 도입된 3개의 추가 헤더는 다음과 같습니다. ISO/IEC 9899..

sourcecode 2023.06.17
반응형