반응형

C 33

C에서 변수 사용을 등록하는 좋은 예는 무엇입니까?

C에서 변수 사용을 등록하는 좋은 예는 무엇입니까? 저는 K&R을 통해 읽고 있는데, 레지스터 변수에 관한 작은 섹션에 왔는데, 여기 사람들이 이것을 실행에 옮기는 좋은 예를 가지고 있는지 궁금합니다. K&R의 섹션 4.7부터: 처럼 보입니다. register intx; ch 레지스터 ch; 분명히 말씀드리자면, 저는 그저 멋진 코드 샘플을 보기를 바랄 뿐입니다.저는 주제를 이해한다고 확신하기 때문에 자세한 설명을 입력할 필요성을 느끼지 마십시오.최신 컴파일러를 사용할 때 레지스터 사용에 대한 좋은 예는 없습니다(읽기: 최근 15년 이상, 그리고 이 답변은 2008년부터입니다). 왜냐하면 이것은 거의 전혀 도움이 되지 않고 일부 나쁜 일을 할 수 있기 때문입니다.당신이 레지스터를 사용할 때, 당신은 컴파..

code 2023.08.01

strln이 NULL을 확인하지 않음

strln이 NULL을 확인하지 않음 이유는strlen()NULL을 확인하지 않습니까? 만약에strlen(NULL)프로그램 분할 결함 그 배경에 있는 이론적 근거를 이해하려고 노력합니다(있는 경우).그 이면에 있는 합리적인 방법은 간단합니다. 존재하지 않는 것의 길이를 어떻게 확인할 수 있을까요? 또한 "관리 언어"와 달리 런타임 시스템이 잘못된 데이터 또는 데이터 구조를 올바르게 처리할 것이라는 기대는 없습니다. (이러한 유형의 문제는 더 많은 "현대" 언어가 비계산 또는 덜 성능적인 애플리케이션에 더 인기 있는 이유입니다.) c의 표준 템플릿은 다음과 같습니다. int someStrLen; if (someStr != NULL) // or if (someStr) someStrLen = strlen(so..

code 2023.08.01

프로그래밍에서 상수를 사용하는 이유는 무엇입니까?

프로그래밍에서 상수를 사용하는 이유는 무엇입니까? 현재 상태로는 이 질문은 우리의 Q&A 형식에 적합하지 않습니다.우리는 답변이 사실, 참고 자료 또는 전문 지식에 의해 뒷받침되기를 기대하지만, 이 질문은 토론, 논쟁, 여론 조사 또는 연장된 토론을 요청할 가능성이 높습니다.만약 이 질문이 개선될 수 있고 다시 열릴 수 있다고 느낀다면,안내를 위해 헬프 센터를 방문합니다. 마감됨11년 전에. 저는 아이보 호튼의 비기닝 C 책을 사용하여 C 공부를 조금 돌아보고 있습니다.저는 같은 문장에서 변수와 섞이는 것처럼 보이는 상수를 선언하는 것에 대한 부분에 도달했습니다. C에서 상수와 변수를 지정하는 것의 차이점은 무엇이며, 실제로 언제 변수 대신 상수를 사용해야 합니까?프로그램 실행 중에 정보가 변경되지 않을..

code 2023.07.27

printf 콘솔에서 인쇄 안 함

printf 콘솔에서 인쇄 안 함 저는 C 언어를 시작하고 있습니다.나는 이클립스(juno)를 IDE로 사용하고 있으며 CDT 플러그인을 설치했습니다.mingw64(GCC 컴파일러)도 풀었습니다.작동하는지 알아보기 위해 아주 간단한 프로그램을 작성했습니다.내 코드는 다음과 같습니다. #include int main() { int age; printf("Hello, please enter your age:\n"); scanf("%d", &age); printf("Your age is %d", age); return 0; } 가 첫 문는출 버퍼첫의 으로 채워져 입니다.printf콘솔로 출력하지 않습니다.숫자를 입력해야 합니다. 그러면 버퍼가 모든 데이터를 콘솔에 쏟아붓기 때문에 콘솔에 다음과 같은 내용이 표..

code 2023.07.17

C: 링크된 목록에서 노드를 해제하는 방법은 무엇입니까?

C: 링크된 목록에서 노드를 해제하는 방법은 무엇입니까? 다른 기능에 할당된 노드를 해제하려면 어떻게 해야 합니까? struct node { int data; struct node* next; }; struct node* buildList() { struct node* head = NULL; struct node* second = NULL; struct node* third = NULL; head = malloc(sizeof(struct node)); second = malloc(sizeof(struct node)); third = malloc(sizeof(struct node)); head->data = 1; head->next = second; second->data = 2; second->next ..

code 2023.06.27

버스 오류 대 세그먼트화 오류

버스 오류 대 세그먼트화 오류 버스 오류와 분할 오류의 차이점은 무엇입니까?프로그램이 세그먼트 오류를 발생시키고 처음으로 정지하고 두 번째로 버스 오류를 발생시키고 종료할 수 있는 경우가 있습니까?제가 사용한 대부분의 아키텍처의 차이점은 다음과 같습니다. SEGV는 사용자가 의도하지 않은 메모리(예: 주소 공간 외부)에 액세스할 때 발생합니다. SIGBUS는 CPU와의 정렬 문제로 인해 발생합니다(예: 4의 배수가 아닌 주소에서 길게 읽으려고 시도). SIGBUS또한 파일을 사용하여 파일 끝을 지나 매핑된 버퍼의 일부에 액세스하려고 할 경우와 공간 부족과 같은 오류 조건이 발생합니다.를 사용하여 신호 처리기를 등록하고 다음을 설정하는 경우SA_SIGINFO프로그램에서 결함이 있는 메모리 주소를 검사하고 ..

code 2023.06.22

C에서 #error 지시어의 용도는 무엇입니까?

C에서 #error 지시어의 용도는 무엇입니까? 무엇입니까?#errorC로 된 지시문?그것이 무슨 소용이 있습니까?여러 가능성 중 하나를 예상할 때(예를 들어) 사용되는 전처리기 지시사항입니다.-D정의해야 할 기호가 없습니다. #if defined(BUILD_TYPE_NORMAL) # define DEBUG(x) do {;} while (0) /* paranoid-style null code */ #elif defined(BUILD_TYPE_DEBUG) # define DEBUG(x) _debug_trace x /* e.g. DEBUG((_debug_trace args)) */ #else # error "Please specify build type in the Makefile" #endif 전처리기가 ..

code 2023.06.17

x86의 MOV가 정말 "무료"가 될 수 있습니까?왜 나는 이것을 전혀 재현할 수 없습니까?

x86의 MOV가 정말 "무료"가 될 수 있습니까?왜 나는 이것을 전혀 재현할 수 없습니까? 저는 레지스터 이름 변경 때문에 x86에서 MOV 명령어가 무료가 될 수 있다고 주장하는 사람들을 계속 보고 있습니다. 저는 이것을 단 한 번의 테스트 사례에서 확인할 수 없습니다.제가 시도하는 모든 테스트 케이스는 그것을 밝혀냅니다. 예를 들어, Visual C++로 컴파일하는 코드는 다음과 같습니다. #include #include #include int main(void) { unsigned int k, l, j; clock_t tstart = clock(); for (k = 0, j = 0, l = 0; j < UINT_MAX; ++j) { ++k; k = j; //

code 2023.06.17

이것이 메모리에서 2개의 c-string이 중복되는지 확인하는 정확하고 휴대 가능한 방법입니까?

이것이 메모리에서 2개의 c-string이 중복되는지 확인하는 정확하고 휴대 가능한 방법입니까? 가장 효율적인 방법은 아닐 수도 있지만, 정확하고 휴대가 가능한가요? int are_overlapping(const char *a, const char *b) { return (a + strlen(a) == b + strlen(b)); } 제가 찾고 있는 것은 실제 내용이 아닌 메모리의 중복입니다.예: const char a[] = "string"; const char b[] = "another string"; are_overlapping(a, b); // should return 0 are_overlapping(a, a + 3); // should return 1 네, 코드가 맞습니다.두 문자열이 샘플 위치..

code 2023.06.12

C의 2D 배열 포인터

C의 2D 배열 포인터 좋은 (그리고 효과적인) 해결책을 제공하는 것에 대해 몇 가지 질문이 있다는 것을 알지만, 이를 달성하기 위한 최선의 방법이 무엇인지 명확하게 말해주는 IMHO는 없습니다.2D 어레이가 있다고 가정해 보겠습니다. int tab1[100][280]; 우리는 이 2D 배열을 가리키는 포인터를 만들고 싶습니다.이를 위해 다음을 수행할 수 있습니다. int (*pointer)[280]; // pointer creation pointer = tab1; //assignation pointer[5][12] = 517; // use int myint = pointer[5][12]; // use 또는 다음과 같은 기능을 사용할 수 있습니다. int (*pointer)[100][280]; // po..

code 2023.06.12
반응형