반응형

c 30

컴파일러에 의한 구조 재정렬

컴파일러에 의한 구조 재정렬 이 질문에는 이미 다음과 같은 답이 있습니다. C 컴파일러는 정렬 패딩을 제거하기 위해 구조 멤버를 재정렬할 수 없는 이유는 무엇입니까? (11개 답변) 마감됨7년 전에. 다음과 같은 구조가 있다고 가정합니다. struct MyStruct { uint8_t var0; uint32_t var1; uint8_t var2; uint8_t var3; uint8_t var4; }; 이것은 아마도 많은 공간을 낭비할 것입니다.은 이은필정때다니문입렬요한것▁▁of의 필요한 정렬 때문입니다.uint32_t변수. 할 수 한 후)uint32_t변수) 다음과 같이 보일 수 있습니다. struct MyStruct { uint8_t var0; uint8_t unused[3]; //3 bytes of ..

programing 2023.07.22

참 조건(x = x ?: 1)에 대한 값을 할당하지 않고 3진수 연산자를 사용하는 이유는 무엇입니까?

참 조건(x = x ?: 1)에 대한 값을 할당하지 않고 3진수 연산자를 사용하는 이유는 무엇입니까? 안드로이드 오픈 소스 qemu 코드에서 나는 다음 코드 라인을 가로질러 실행했습니다. machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */ 이것은 단지 다음과 같이 말하는 혼란스러운 방식입니까? if (machine->max_cpus) { ; //do nothing } else { machine->max_cpus = 1; } 그렇다면 다음과 같이 더 명확하지 않을까요? if (machine->max_cpus == 0) machine->max_cpus = 1; 흥미롭게도, 이것은 gcc와 잘 컴파일되고 작동하지만, http://www.comeau..

programing 2023.07.17

C에서 선언문 안에 있는 콜론은 무엇을 의미합니까?

C에서 선언문 안에 있는 콜론은 무엇을 의미합니까? 이 질문에는 이미 다음과 같은 답이 있습니다. 마감됨12년 전에. 중복 가능성: 'unsigned temp:3'은 무엇을 의미합니까? 저는 커널 코드를 배우고 있으며, 다음과 같은 라인(리눅스 2.4, sched.h, struct mm_struct)을 따라왔습니다. unsigned dumpable:1; 이것은 무엇을 의미합니까?비트필드 멤버입니다.당신의 코드는 다음과 같습니다.dumpable구조에서 정확히 1비트를 차지합니다. 비트 필드는 구성원을 비트 수준으로 채우기 위해 사용됩니다.이렇게 하면 구조에 많은 플래그가 있을 때 사용되는 메모리 크기를 크게 줄일 수 있습니다.예를 들어, 알려진 숫자 제약 조건을 가진 4개의 멤버를 가진 구조를 정의한다면,..

programing 2023.07.07

경로에서 파일 이름을 추출하는 방법

경로에서 파일 이름을 추출하는 방법 Linux API/POSIX에는 전체 경로에서 기본 파일 이름을 추출하는 우아한 것이 있어야 합니다.참조. "는을 " 명령실니다합행또▁"▁command다▁the" 을 실행합니다.man 3 basename대상 UNIX/POSIX 시스템에서 사용할 수 있습니다.사용하다basename(의미를 ) strrchr(pathname, '/')전체 문자열이 다음을 포함하지 않는 경우 기본 이름으로 처리합니다.'/'성격.다음은 1-라인의 예입니다( 주어진).char * whoami는 기본 알고리즘을 것입니다. (whoami = strrchr(argv[0], '/')) ? ++whoami : (whoami = argv[0]); NULL이 가능한 경우 추가 확인이 필요합니다.또한 이것은 ..

programing 2023.07.07

C 컴파일러가 외부 이름에 밑줄을 추가하는 이유는 무엇입니까?

C 컴파일러가 외부 이름에 밑줄을 추가하는 이유는 무엇입니까? 저는 C에서 너무 오랫동안 일해왔기 때문에 컴파일러가 일반적으로 시작 부분에 밑줄을 추가한다는 사실이 있습니다.extern그냥 이해한 것뿐...하지만 오늘 또 다른 SO 질문은 밑줄이 추가된 진짜 이유에 대해 궁금하게 만들었습니다.위키백과 기사는 다음과 같은 이유가 있다고 주장합니다. C 컴파일러는 런타임 언어 지원의 기여와의 충돌을 방지하기 위해 모든 외부 범위 프로그램 식별자에 선행 밑줄을 추가하는 것이 일반적이었습니다. 저는 이것에 대해 최소한 진실이 있다고 생각하지만, 또한 모든 외부에 밑줄이 더해진다면 충돌을 예방하는 데 큰 도움이 되지 않기 때문에 질문에 실제로 답하지 않는 것처럼 보입니다. 누가 선행 밑줄의 근거에 대해 좋은 정보..

programing 2023.07.02

calloc(4, 6)는 calloc(6, 4)와 동일합니까?

calloc(4, 6)는 calloc(6, 4)와 동일합니까? 저는 초보 C 프로그래머이고, 저는 이것이 그럴 것이라고 생각했지만, 가능하다면 확인하고 싶습니다. 만약 그들이 같다면, 대신에 하나의 주장을 채택하는 것이 어떨까요?사이에 실질적인 차이는 없습니다.calloc(a, b)그리고.calloc(b, a)그럼에도 불구하고 - 둘 다 동일한 양의 공간을 할당하고 적절하게 채웁니다.블록 내 요소의 정렬은 입력되지 않으며, 물건의 "크기"가 무엇인지 명시적으로 말하고 있기 때문에 패딩이 필요하지 않습니다(모든 패딩은 사용하여 제어됩니다).sizeof두 번째 변론에서 사용하는 이유와 관련하여callocmalloc사람들은 종종 정해진 숫자의 항목에 공간을 할당하기 위해 할당 루틴을 사용합니다.calloc()..

programing 2023.06.17

C에서 **를 사용할 때의 차이점

C에서 **를 사용할 때의 차이점 최근에 C를 배우기 시작했는데 포인터 구문을 이해하는 데 문제가 있습니다. 예를 들어 다음 줄을 쓸 때입니다. int ** arr = NULL; 다음과 같은 경우 어떻게 알 수 있습니까? ar는 정수의 포인터에 대한 포인터입니다. ar는 정수에 대한 포인터 배열에 대한 포인터입니다. ar는 정수 배열에 대한 포인터 배열에 대한 포인터입니다. 다 똑같지 않습니까?int **? Another question for the same problem: ▁를 받는 이 있으면,char ** s매개 변수로, 나는 그것을 a라고 부르고 싶습니다.pointer 포인터, 문열배열대포터인한포, 에▁of▁의 배열에 합니다.chars하지만 그것은 또한 포인터에 대한 포인터입니다.char? 다 똑..

programing 2023.06.12

데이터 유형 생략(예: "unsigned int" 대신 "unsigned")

데이터 유형 생략(예: "unsigned int" 대신 "unsigned") C/C++ 코드에서 데이터 형식 선언이 다음과 같은 방식으로 생략되는 경우를 알고 있습니다.unsigned test=5;컴파일러는 자동으로 이 변수를 int(이 경우에는 부호 없는 int)로 만듭니다.C 표준이며 모든 컴파일러에서 작동할 것이라고 들었습니다. 하지만 저는 이것을 하는 것이 나쁜 관행으로 여겨진다고도 들었습니다. 당신은 어떻게 생각하나요?정말로 타이핑을 해야 합니까?unsigned int의 대신에unsigned? 이다short,long그리고.long long데이터 유형도 있습니까?unsigned 는 데이터 유형입니다!그리고 그것은 우연히 발생합니다.unsigned int. 글을 쓸 때unsigned x;데이터 유형..

programing 2023.06.07

C(char, int)에서 포인터 교환

C(char, int)에서 포인터 교환 저는 C에서 포인터를 교환할 때의 다른 행동을 이해하기 위해 노력해 왔습니다.두 개를 요.int는 인터포, 그면할수있다니습러포▁do를 할 수 있습니다. void intSwap (int *pa, int *pb){ int temp = *pa; *pa = *pb; *pb = temp; } 하지만, 만약 내가 두 개를 교환하고 싶다면,char제가 해야 할 조언들은 다음과 같습니다. void charSwap(char** a, char** b){ char *temp = *a; *a = *b; *b = temp; } 내가 한다면, void charSwap(char* a, char* b){ char temp = *a; *a = *b; *b = temp; } 컴파일러는 값을 변경할..

programing 2023.06.07

GCC에 대한 "-Wl, option"과 "-Xlinker option" 구문 사이에 차이점이 있습니까?

GCC에 대한 "-Wl, option"과 "-Xlinker option" 구문 사이에 차이점이 있습니까? 몇 가지 구성 파일을 살펴보았는데 두 파일이 모두 사용되는 것을 보았습니다(다른 아키텍처에서도 마찬가지임).Linux 박스에서 GCC를 사용하는 경우 링커에 옵션을 전달하기 위한 두 구문 사이에 차이점이 있습니까? GCC 설명서를 보면 제가 알 수 있는 한 거의 동일하게 설명되어 있습니다.부터man gcc: -Xlinker 옵션 옵션을 링커에 옵션으로 전달합니다.이를 사용하여 GCC가 인식하는 방법을 모르는 시스템별 링커 옵션을 제공할 수 있습니다. 별도의 인수를 사용하는 옵션을 전달하려면 -Xlinker를 옵션에 한 번, 인수에 한 번 두 번 사용해야 합니다.예를 들어 -assert 정의를 전달하려..

programing 2023.06.07
반응형