반응형

C 25

서명되지 않은 int 0xFFFFFFFF가 int -1과 같은 이유는 무엇입니까?

서명되지 않은 int 0xFFFFFFFF가 int -1과 같은 이유는 무엇입니까? C 또는 C++에서 a size_t(부호화되지 않은 int 데이터 유형)가 보유할 수 있는 최대 수는 해당 데이터 유형에 -1을 주조하는 것과 동일하다고 합니다.예를 들어 size_t에 대한 잘못된 값을 참조하십시오. 왜요? 즉, (32비트 int에 대해 이야기함) AFAIK에서 가장 의미 있는 비트는 부호화된 데이터 유형(즉, 음수를 형성하기 위해 비트 0x800000)으로 부호를 유지합니다.그러면 1은 0x00000001..0x7FFFFFFFF는 데이터 유형이 보유할 수 있는 최대 양수입니다. 그렇다면 AFAIK는 -1 int의 이진법 표현이 0x80000001이어야 합니다(아마도 제가 틀렸을 것입니다).int를 비부호..

programing 2023.11.06

C에서 정의되지 않은 동작인가요? 출력을 논리적으로 예측하지 않으면

C에서 정의되지 않은 동작인가요? 출력을 논리적으로 예측하지 않으면 코드1 #include int f(int *a, int b) { b = b - 1; if(b == 0) return 1; else { *a = *a+1; return *a + f(a, b); } } int main() { int X = 5; printf("%d\n",f(&X, X)); } 이 C 코드를 생각해 보십시오.여기서 문제는 생산량을 예측하는 것입니다.논리적으로 31개의 출력을 받습니다. (기계의 출력) 반품 문을 다음으로 변경할 때 return f(a, b) + *a; 논리적으로 37을 얻습니다. (기계의 출력) 제 친구 중 한 명이 답례문을 계산하면서 말했습니다. return *a + f(a, b); 우리는 트리의 깊이로 가는..

programing 2023.11.01

type cast void 포인터를 사용하는 이유는 무엇입니까?

type cast void 포인터를 사용하는 이유는 무엇입니까? C를 처음 접했을 때, 제가 보이드 포인터에서 얻은 유일한 실용적인 사용법은 주어진 포인터에 다양한 데이터 유형을 저장할 수 있는 다용도 기능입니다.그래서 메모리 할당을 할 때 포인터를 타이핑하지 않았습니다. 저는 가끔 보이드 포인터를 사용하는 코드 예시를 본 적이 있지만, 그것들은 타이프 캐스트됩니다.이것이 왜 유용합니까?공백 대신 원하는 유형의 포인터를 직접 만드는 것은 어떨까요?C에서 다른 유형에 회피 포인터를 캐스팅하는 데는 두 가지 이유가 있습니다. 포인터가 가리키는 것에 접근하려면 (*(int*)p = 42) 만약 당신이 실제로 "진짜" C가 아닌 C와 C++의 공통 부분집합에 코드를 쓰고 있다면요.참고 항목 malloc의 결과를..

programing 2023.11.01

만들기에서 pkg-config를 사용하는 방법

만들기에서 pkg-config를 사용하는 방법 가장 간단한 GTK 프로그램을 컴파일하고 싶습니다.명령줄을 사용하여 컴파일할 수 있습니다. gcc $(pkg-config --cflags --libs gtk+-3.0) main.c -o main.o 그러나 만들기를 사용하면 작동하지 않습니다. CFLAGS=-g -Wall -Wextra $(pkg-config --cflags) LDFLAGS=$(pkg-config --libs gtk+-3.0) CC=gcc SOURCES=$(wildcard *.c) EXECUTABLES=$(patsubst %.c,%,$(SOURCES)) all: $(EXECUTABLES) 내게 이런 말이 있습니다. gcc -g -Wall -Wextra -c -o main.o main.c mai..

programing 2023.10.27

UINT_MAX는 모든 비트가 1로 설정되어 있습니까?

UINT_MAX는 모든 비트가 1로 설정되어 있습니까? 이 질문은 전에 했던 것인데 저는 여전히 혼란스럽습니다. 나는 그것을 알고 있습니다. unsigned int a = -1; 되지요UINT_MAX. 그러나 -1의 모든 비트가 설정되어 있기 때문은 아닙니다.C11은 말합니다. new type이 부호가 없는 경우 값이 new type의 범위에 들어갈 때까지 new type에서 나타낼 수 있는 최대값보다 하나를 더 많이 반복적으로 가감함으로써 값이 변환됩니다. 그래서 이렇게 하자구요.UINT_MAX는 100입니다. (2^16-1보다 커야 한다는 것을 알고 있지만 이는 일단 무시합니다.) unsigned int a = -1; // will be unsigned int a = -1 + UINT_MAX + 1;..

programing 2023.10.17

inotify와 epoll의 차이

inotify와 epoll의 차이 i/o 뷰어 inotify와 epoll의 차이점이 무엇인지 알고 싶습니다. 통고하지 않은 inotify_init(void)는 이벤트를 읽을 inotify 인스턴스를 만듭니다. inotify_add_watch(intfd, constchar * path, int mask)는 경로 뒤의 파일 노드 주변에서 watch fd를 반환합니다. inotify_rm_watch(intfd, intwd) fd에서 이벤트 감시를 중지합니다. 에폴 epoll_create(void)는 epoll 개체를 만듭니다. epoll_ctl(intepfd, intop, intfd, struct epoll_event * event) 시청할 이벤트를 설정합니다. epoll_wait(intepfd, struct..

programing 2023.10.17

현재 실행 중인 코드에 대한 HMODULE을 얻으려면 어떻게 해야 합니까?

현재 실행 중인 코드에 대한 HMODULE을 얻으려면 어떻게 해야 합니까? 나는 정적 라이브러리를 가지고 있는데 둘 중 하나에 연결될 수 있습니다..exe아니면..dll. 실행 시 라이브러리 함수 중 하나가 다음을 얻길 원합니다.HMODULE정적 라이브러리 코드가 연결된 모든 것에 대해. 저는 현재 다음과 같은 트릭을 사용하고 있습니다(이 포럼에서 영감을 얻었습니다). const HMODULE GetCurrentModule() { MEMORY_BASIC_INFORMATION mbi = {0}; ::VirtualQuery( GetCurrentModule, &mbi, sizeof(mbi) ); return reinterpret_cast(mbi.AllocationBase); } 그렇게 딱딱해 보이지 않는 더 ..

programing 2023.10.17

POSIX가 CHAR_B를 의무화한 이유는 무엇입니까?IT==8?

POSIX가 CHAR_B를 의무화한 이유는 무엇입니까?IT==8? POSIX의 이론적 근거에는 CHAR_B를 의무화하는 내용이 있습니다.8번은 소켓/네트워킹을 버리지 않고 C99와 정렬을 유지하기 위해 양보한 것이지만, 정확히 어떤 충돌인지에 대한 설명은 본 적이 없습니다.왜 그것이 필요하다고 여겨졌는지에 대한 일화나 인용이 있는 사람이 있습니까? 편집: 왜 그것이 바람직한지에 대한 추측성 답변을 많이 받았습니다.CHAR_BIT 것에 항목 충돌이 무엇인가 8살이 되는 것에 동의합니다. 하지만 제가 정말로 찾고 있는 것은 POSIX에서 C99와 네트워킹 사이의 기술적 충돌이 무엇인가 하는 것입니다.제 추측으로는 C99가 필요한 것과 관련이 있는 것 같습니다.uint*_t정확한 크기의 유형(패딩 없음)인 반..

programing 2023.10.17

할당은 캐스트가 없는 정수에서 포인터를 만듭니다.

할당은 캐스트가 없는 정수에서 포인터를 만듭니다. 자바 배경에서 저는 C를 배우고 있지만, 모호한 컴파일러 오류 메시지가 점점 더 좌절감을 느낍니다.제 암호는 이렇습니다. /* * PURPOSE * Do case-insensetive string comparison. */ #include #include #include int compareString(char cString1[], char cString2[]); char strToLower(char cString[]); int main() { // Declarations char cString1[50], cString2[50]; int isEqual; // Input puts("Enter string 1: "); gets(cString1); puts("..

programing 2023.10.12

c/c++ 함수의 소스 코드

c/c++ 함수의 소스 코드 다양한 C/C++ 기능(strcpy, stcmp, strstr 등)의 구현을 살펴보고 싶었습니다.이것은 c/c++의 좋은 코딩 방법을 아는 데 도움이 될 것입니다.어디서 찾을 수 있는지 알려주시겠습니까? 감사해요.당신은 C 표준 라이브러리에 있는 모든 C 함수에 대한 소스 코드를 가지고 있는 glibc의 복사본을 확인할 수 있습니다.좋은 출발점이 될 겁니다.C 표준 라이브러리의 소스 코드가 반드시 좋은 코딩 방식을 강조하는 것은 아니라는 점을 지적할 필요가 있습니다.표준 라이브러리로서, 단순히 사용되는 정확한 컴파일러를 알고 있기 때문에 특정되지 않거나 휴대할 수 없는 수많은 동작에 의존할 수 있는 특별한 지위를 가지고 있습니다. 그리고 물론 이것은 C 코딩 방법에 대해서만 ..

programing 2023.10.12
반응형