반응형

C 103

C에서 값 최적화 및 복사 항목 반환

C에서 값 최적화 및 복사 항목 반환 C의 값으로 구조물을 통과시키고 반환할 수 있다는 것을 모르는 사람도 있습니다.C에서 구조물을 반환할 때 컴파일러가 불필요한 복사를 하는 것에 대한 질문입니다.GCC 등의 C 컴파일러는 Return Value Optimization(RVO; 반환값 최적화)을 사용하고 있습니까, 아니면 C++만의 개념입니까?RVO 및 복사 삭제에 대해 읽은 내용은 모두 C++에 관한 것입니다. 예를 들어보자.현재 C에 더블 더블 데이터 타입을 실장하고 있습니다(유닛 테스트가 간단하기 때문에 플로트 플로트라고 하는 것이 좋습니다).다음 코드를 고려합니다. typedef struct { float hi; float lo; } doublefloat; doublefloat quick_two_..

programing 2022.08.19

x86, win32의 빈 프로그램에 대한 GCC 어셈블리 출력

x86, win32의 빈 프로그램에 대한 GCC 어셈블리 출력 stackoverflow 코더의 지옥을 짜증나게 하기 위해 빈 프로그램을 쓰고 있지 않다.나는 단지 gnu 툴체인을 탐색하고 있을 뿐이다. 다음 내용은 너무 복잡할 수 있지만, 빈 프로그램 이야기를 계속하기 위해 C 컴파일러의 출력, 즉 GNU가 소비하는 것을 조사하기 시작했습니다. gcc version 4.4.0 (TDM-1 mingw32) test.c: int main() { return 0; } gcc - S test.c .file "test.c" .def ___main; .scl 2; .type 32; .endef .text .globl _main .def _main; .scl 2; .type 32; .endef _main: pushl..

programing 2022.08.19

무엇 현재 GCC(우분투 특히)의 기본 C-std 표준 버전일까요?

무엇 현재 GCC(우분투 특히)의 기본 C-std 표준 버전일까요? 내가 cc의 현재 버전으로 보게 물으면 이것을 받으면. $ cc --version cc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ 나는 알고 싶는 c89, c90, c99 또는 c11의 사용되고 있다.매뉴얼에서 .gcc가되어 있는 gcc 매뉴얼을 info gc..

programing 2022.08.19

구조에서 변수 이름 앞에 있는 점은 무엇을 의미합니까?

구조에서 변수 이름 앞에 있는 점은 무엇을 의미합니까? Linux 커널 소스를 살펴보니 다음과 같습니다. static struct tty_operations serial_ops = { .open = tiny_open, .close = tiny_close, .write = tiny_write, .write_room = tiny_write_room, .set_termios = tiny_set_termios, }; 나는 C에서 그런 표기법을 본 적이 없다.변수 이름 앞에 점이 있는 이유는 무엇입니까?이것은 Designated Initializer로 C99에 추가된 구문입니다.관련 발췌: 구조 이니셜라이저에서 요소 값 앞에 '.fieldname ='로 초기화할 필드 이름을 지정합니다.예를 들어, 다음과 같은 구..

programing 2022.08.18

C에 부호 없는 포화 덧셈을 어떻게 하나요?

C에 부호 없는 포화 덧셈을 어떻게 하나요? 포화 덧셈을 C에 쓰는 가장 좋은 방법(가장 깨끗하고 효율적인 방법)은 무엇입니까? 함수 또는 매크로는 부호 없는 2개의 입력(16비트 버전과 32비트 버전 모두 필요)을 추가하고 합계가 오버플로우되면 all-bits-one(0xFFFF 또는 0xFFFFFF)을 반환해야 합니다. 대상은 gcc(4.1.2)와 Visual Studio를 사용하는 x86 및 ARM입니다(시뮬레이션 전용이므로 폴백 구현은 문제 없습니다).컴파일러가 적절한 ARM 어셈블리로 변환되는 휴대용 C 코드가 필요할 수 있습니다.ARM에는 조건부 이동이 있으며, 이러한 이동은 오버플로에 따라 달라질 수 있습니다.알고리즘은, 오버플로우가 검출되었을 경우는, 행선지를 add 및 조건부로 unsig..

programing 2022.08.18

"Assert" 기능은 무엇입니까?

"Assert" 기능은 무엇입니까? 를 알게 되었습니다.assert능 、 、 、 、 "assert는 해당 인수가 거짓으로 판명될 경우 프로그램을 종료합니다(통상은 assert 스테이트먼트를 인용한 메시지 포함).이것은 보통 디버깅 중에 예기치 않은 상황이 발생했을 때 프로그램 장애를 보다 명확하게 하기 위해 사용됩니다. 예를 들어 다음과 같습니다. assert(length >= 0); // die if length is negative. 다음과 같이 실패했을 때 표시되는 보다 유용한 메시지를 추가할 수도 있습니다. assert(length >= 0 && "Whoops, length can't possibly be negative! (didn't we just check 10 lines ago?) Tell..

programing 2022.08.18

글로벌 변수 앞에 static 키워드를 사용하는 경우

글로벌 변수 앞에 static 키워드를 사용하는 경우 헤더 파일에 정의된 글로벌 변수 또는 상수 앞에 static 키워드를 사용해야 하는 시기를 설명할 수 있습니까? 예를 들어 다음과 같은 행이 있는 헤더파일이 있다고 합시다. const float kGameSpriteWidth = 12.0f; 이 경우static앞에const안 그래요?를 사용하기 위한 베스트 프랙티스는 무엇입니까?static?헤더 파일에 글로벌 변수를 정의하지 마십시오..c 소스 파일에서 정의해야 합니다. 글로벌 변수가 하나의 .c 파일 내에서만 표시되는 경우 정적임을 선언해야 합니다. 글로벌 변수를 여러 .c 파일에 걸쳐 사용하는 경우 정적임을 선언하지 마십시오.대신 필요한 모든 .c 파일에 포함된 헤더 파일에 외부로 선언해야 합니다...

programing 2022.08.18

구조 선언의 콜론은 :1, :7, :16 또는 :32와 같이 무엇을 의미합니까?

구조 선언의 콜론은 :1, :7, :16 또는 :32와 같이 무엇을 의미합니까? 다음 C++ 코드는 무엇을 의미합니까? unsigned char a : 1; unsigned char b : 7; 두 개의 문자 a와 b가 생성되고 둘 다 1바이트가 되어야 하는데, ": 1"과 ": 7" 부분이 어떤 역할을 하는지 모르겠습니다. 1과 7은 값의 범위를 제한하는 비트 크기입니다.그들은 전형적으로 건물과 조합에서 발견됩니다.예를 들어 일부 시스템에서는 (에 따라 다름)char폭 및 포장 규칙 등) 코드: typedef struct { unsigned char a : 1; unsigned char b : 7; } tOneAndSevenBits; 8비트 값을 만듭니다.a및 7비트의 경우b. 일반적으로 C에서 8비트..

programing 2022.08.17

C 프로그래밍: 다른 함수의 malloc()

C 프로그래밍: 다른 함수의 malloc() 이 malloc() 다른 기능 안에 있습니다. 포인터와 사이즈를 기능에게 전달하고 있습니다.main() 포인터에 .malloc(), 내부에 있는 아닙니다.main(). 포인터를 함수에 전달하고 호출된 함수 내부에서 전달된 포인터에 메모리를 할당하려면 어떻게 해야 합니까? 아래 코드를 작성했더니 아래와 같이 출력됩니다. 출처: int main() { unsigned char *input_image; unsigned int bmp_image_size = 262144; if(alloc_pixels(input_image, bmp_image_size)==NULL) printf("\nPoint2: Memory allocated: %d bytes",_msize(input_..

programing 2022.08.17

C 또는 C++ 표준에서는 char를 부호 있는 문자 또는 부호 없는 문자로 명시적으로 정의하지 않는 이유는 무엇입니까?

C 또는 C++ 표준에서는 char를 부호 있는 문자 또는 부호 없는 문자로 명시적으로 정의하지 않는 이유는 무엇입니까? int main() { char c = 0xff; bool b = 0xff == c; // Under most C/C++ compilers' default options, b is FALSE!!! } C 또는 C++ 표준에서는 char를 부호화 또는 부호 없음으로 지정하지 않습니다.이것은 구현 정의되어 있습니다. 왜 C/C++ 규격에서는 위의 코드와 같은 위험한 오용을 피하기 위해 char를 signed 또는 unsigned로 명시적으로 정의하지 않는가?역사적 이유 때문이지 유형의 표현char로 승진하다int(많은 CPU에는 8비트 산술 연산이 없기 때문에) 대부분의 컨텍스트에서 사용..

programing 2022.08.17
반응형