반응형

c 29

문자열이 null로 종료되는 이유는 무엇입니까?또는: null-terminal vs. 문자 + 길이 저장

문자열이 null로 종료되는 이유는 무엇입니까?또는: null-terminal vs. 문자 + 길이 저장 나는 C에서 언어 통역사를 쓰고 있고, 나의.string유형에 a가 포함되어 있습니다.length속성은 다음과 같습니다. struct String { char* characters; size_t length; }; 이 때문에 C에는 이런 종류의 문자열을 지원하는 기능이 내장되어 있지 않기 때문에 나는 통역사에서 많은 시간을 수동으로 처리해야 합니다.기본적인 C를 준수하기 위해 단순한 null-terminated 문자열로 전환하는 것을 고려했지만, 다음과 같이 하지 않을 이유가 많은 것 같습니다. Null을 찾는 대신 "length"를 사용하는 경우 경계 검사가 기본 제공됩니다. 문자열의 길이를 찾기 ..

programing 2023.11.07

C/C++의 서로 다른 호출 규약은 무엇이며 각각의 의미는 무엇입니까?

C/C++의 서로 다른 호출 규약은 무엇이며 각각의 의미는 무엇입니까? C/C++에는 다양한 호출 규약이 있습니다.stdcall,extern,pascal, 등. 이러한 호출 규약은 몇 개이며, 각각의 의미는 무엇입니까?이것들을 설명하는 링크가 있습니까?간단한 답변:저는 cdecl, stdcall, fastcall을 사용합니다. 저는 패스트콜을 거의 사용하지 않습니다. stdcall은 Windows API 함수를 호출하는 데 사용됩니다. 자세한 답변 (Wikipedia에서 도난): cdecl - cdecl에서는 서브루틴 인수가 스택에 전달됩니다.정수 값과 메모리 주소는 EAX 레지스터에, 부동 소수점 값은 ST0 x87 레지스터에 반환됩니다.레지스터 EAX, ECX 및 EDX는 호출자 저장되고 나머지는 호..

programing 2023.11.02

C의 함수 인수로 포인터

C의 함수 인수로 포인터 예를 들어 다음과 같은 코드를 사용할 수 있습니다. int num = 5; int *ptr = # 다음 두 기능의 차이점은 무엇입니까? void func(int **foo); void func(int *foo); 함수를 호출하는 위치: func(&ptr); 둘 중 하나는 포인터를 매개 변수로 사용하고, 두 번째는 포인터만 사용한다는 것을 알고 있습니다. 지나가면func(&ptr), 저는 효과적으로 포인터를 보내고 있습니다.포인터가 다른 포인터를 가리킨다면 어떤 차이가 있습니까? 후자가 비호환성 경고를 할 것으로 생각하지만, 당신이 무엇을 하고 있는지 알기만 하면 세부 사항은 중요하지 않은 것 같습니다.가독성과 전자를 이해하기 위해서 더 나은 선택지(2성 포인터)인 것 같지..

programing 2023.10.28

C에서 좋은 오픈 소스 B-트리 구현은 무엇입니까?

C에서 좋은 오픈 소스 B-트리 구현은 무엇입니까? 문 닫았습니다.이 질문은 충족되지 않습니다.스택 오버플로 지침.현재 답변을 받지 않고 있습니다. 도구, 라이브러리 또는 선호하는 오프사이트 리소스를 추천하거나 찾으라는 질문은 의견이 많은 답변과 스팸을 끌어들이는 경향이 있기 때문에 스택 오버플로에서는 주제가 다릅니다.대신, 문제와 그것을 해결하기 위해 지금까지 무엇을 했는지 설명하세요. 9년전에 문을 닫았습니다. 이 질문을 개선합니다. 저는 C로 작성된 B-tree 라이브러리의 희박하고 잘 구축된 오픈 소스 구현을 찾고 있습니다.상용 애플리케이션에서 사용할 수 있도록 비GPL 라이선스를 받아야 합니다.이상적으로, 이 라이브러리는 B-tree 인덱스를 디스크 파일로 저장/조작하여 구성 가능한(즉, 최소)..

programing 2023.10.28

정수 대 IP 주소 - C

정수 대 IP 주소 - C 저는 퀴즈를 준비하고 있는데, 제가 그런 기능을 실행하는 임무를 맡을지도 모른다는 강한 의심이 듭니다.기본적으로 네트워크 표기법의 IP 주소가 주어졌을 때 32비트 정수에서 점선 10진수 표기법(155.247.182.83과 같은)의 문자열로 어떻게 가져올 수 있습니까?분명히 우리는 어떤 형태의 인터넷 기능도 사용할 수 없습니다.난감해요!실제로 인터넷 기능을 사용할 수 있습니다.관찰하다. main.c: #include main() { uint32_t ip = 2110443574; struct in_addr ip_addr; ip_addr.s_addr = ip; printf("The IP address is %s\n", inet_ntoa(ip_addr)); } 결과는gcc main...

programing 2023.10.23

C에서 선언 후 배열을 초기화할 수 있습니까?

C에서 선언 후 배열을 초기화할 수 있습니까? 실제로 초기화하기 전에 이와 같은 변수를 선언하는 방법이 있습니까? CGFloat components[8] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15 }; 다음과 같이 선언했으면 합니다(단, 이것이 작동하지 않습니다). CGFloat components[8]; components[8] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15 }; 어레이에 할당할 수 없으므로 기본적으로 제안한 작업을 수행할 수 없지만 C99에서는 다음 작업을 수행할 수 있습니다. CGFloat *components; components = (CGFloat [8]) { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,..

programing 2023.10.23

Clean C 코드를 작성하는 동안 ARM 미정렬 메모리 액세스의 이점 활용

Clean C 코드를 작성하는 동안 ARM 미정렬 메모리 액세스의 이점 활용 이전에는 ARM 프로세서가 정렬되지 않은 메모리 액세스(ARMv5 이하)를 제대로 처리할 수 없었습니다.뭐 이런 거.u32 var32 = *(u32*)ptr;만약에 실패한다면 (raise 예외)ptr4-bytes에 제대로 정렬되지 않았습니다 그러나 이러한 CPU는 항상 이러한 상황을 매우 효율적으로 처리했기 때문에 이러한 문을 작성하는 것이 x86/x64에서는 잘 작동할 것입니다.그러나 C 표준에 따르면, 이것은 그것을 쓰는 "적절한" 방법이 아닙니다.u32는 4 바이트 구조와 동일하며 4 바이트에 정렬되어야 합니다. 정통적인 정확성을 유지하고 모든 CPU와의 완전한 호환성을 보장하면서 동일한 결과를 얻을 수 있는 적절한 방법은..

programing 2023.10.18

클랑에 커스텀 어셈블러를 어떻게 사용합니까?

클랑에 커스텀 어셈블러를 어떻게 사용합니까? ARM의 크로스 컴파일러로 사용하기 위해 클랜을 컴파일했습니다../configure --target=armv7l-unknown-linux-gnueabihf), 하지만 제가 어떤 C 코드를 컴파일하려고 하면, 그것은 사용하려고 합니다./usr/bin/as. 저는 이미 ARM용으로 컴파일된 binutils를 가지고 있으며, 별도의 디렉토리에 있습니다.지정한 어셈블러를 사용하기 위해 clang(또는 allvm)을 지시하려면 어떻게 해야 합니까?--host 옵션을 전달하여 모든 ccar etc 유틸리티가 armv7l- unknown- linux-gnueabihf- 예: ./configure --host=armv7l-unknown-linux-gnueabihf --bui..

programing 2023.10.13

C에서 정적 함수와 변수를 사용하는 이유

C에서 정적 함수와 변수를 사용하는 이유 는 의 .staticC의 파일에서 변수의 범위 제한으로 키워드를 지정합니다. 제가 보기에 C 프로그램을 만드는 표준 방법은 다음과 같습니다. c 있습니다. c 로 가 제한되어 있을 것입니다. 아마도 범위는 다음과 같습니다.static. 다른 c 파일들이 사용할 수 있도록 해당 c 파일의 함수와 변수를 선언하는 h 파일들을 많이 가지고 있습니다.개인 함수 및 변수는 h 파일에 게시되지 않습니다. 모든 c 파일은 o 파일로 따로 컴파일됩니다. allo 파일은 응용프로그램 파일에 함께 링크됩니다. 을 로 하는 두 봅니다.statich되지 않은 h 가: 하나는 가독성을 위한 것입니다.저를 포함한 미래의 독자들에게 변수가 다른 어떤 파일에서도 접근할 수 없음을 알려줍니다...

programing 2023.10.13

초기화되지 않은 구조 부재는 항상 0으로 설정됩니까?

초기화되지 않은 구조 부재는 항상 0으로 설정됩니까? C 구조를 생각해 보십시오. struct T { int x; int y; }; 에서와 같이 부분적으로 초기화된 경우 struct T t = {42}; 가t.y0이 보장되는 것인가요, 아니면 이것이 컴파일러의 구현 결정인가요?배열 초기화자와 마찬가지로 부분 초기화된 경우 0이 보장됩니다.초기화가 되지 않으면 알 수 없습니다. struct T t; // t.x, t.y will NOT be initialized to 0 (not guaranteed to) struct T t = {42}; // t.y will be initialized to 0. 마찬가지로: int x[10]; // Won't be initialized. int x[10] = {1}; /..

programing 2023.10.13
반응형