«c» 태그된 질문

C는 시스템 프로그래밍 (OS 및 임베디드), 라이브러리, 게임 및 크로스 플랫폼에 사용되는 범용 프로그래밍 언어입니다. 이 태그는 달리 지정하지 않는 한 ISO 9899 표준 (최신 버전, 9899 : 2018, C89, c99, c11 등으로 버전 별 요청에 태그 지정)에 정의 된대로 C 언어와 관련된 일반적인 질문과 함께 사용해야합니다. C는 C ++과 구별되며 합리적인 이유없이 C ++ 태그와 결합해서는 안됩니다.

6
컴파일러가 do-while 루프에 대해 다른 유형의 루프에 비해 더 나은 코드를 생성합니까?
zlib 압축 라이브러리 (Chromium 프로젝트에서 사용됨)에는 C의 do-while 루프가 대부분의 컴파일러에서 "더 나은"코드를 생성 함을 암시 하는 주석이 있습니다 . 다음은 표시되는 코드 스 니펫입니다. do { } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && scan < strend); /* The …

4
memmove가 memcpy보다 빠른 이유는 무엇입니까?
memmove (3)에서 시간의 50 %를 소비하는 응용 프로그램의 성능 핫스팟을 조사하고 있습니다. 응용 프로그램은 수백만 개의 4 바이트 정수를 정렬 된 배열에 삽입하고 삽입 된 값을위한 공간을 만들기 위해 memmove를 사용하여 데이터를 "오른쪽으로"이동합니다. 나의 기대는 메모리 복사가 매우 빠르다는 것이었고, memmove에 너무 많은 시간을 소비하는 것에 놀랐습니다. 그러나 memmove가 겹치는 …
89 c++  c  performance  memory 

9
a +++++ b가 작동하지 않는 이유는 무엇입니까?
int main () { int a = 5,b = 2; printf("%d",a+++++b); return 0; } 이 코드는 다음 오류를 제공합니다. 오류 : 증가 피연산자로 lvalue 필요 하지만 전반에 걸쳐 공간을 세우면 a++ +하고 ++b다음 잘 작동합니다. int main () { int a = 5,b = 2; printf("%d",a++ + ++b); return 0; …
89 c  lvalue 

7
Linux 커널은 어떻게 자체적으로 컴파일 할 수 있습니까?
내 컴퓨터에 Linux 시스템을 설치할 때 Linux 커널의 컴파일 프로세스를 잘 이해하지 못합니다. 다음은 나를 혼란스럽게하는 몇 가지 사항입니다. 커널은 C로 작성되었지만 컴파일러를 설치하지 않고 어떻게 커널을 컴파일 했습니까? 커널이 컴파일되기 전에 내 컴퓨터에 C 컴파일러가 설치되어있는 경우 컴파일러를 설치하지 않고 어떻게 컴파일러 자체를 컴파일 할 수 있습니까? 나는 며칠 …

3
"as-if"규칙은 정확히 무엇입니까?
제목에서 알 수 있듯이 "as-if"규칙은 정확히 무엇입니까? 일반적인 대답은 다음과 같습니다. 프로그램의 관찰 가능한 동작을 변경하지 않는 모든 코드 변환을 허용하는 규칙 때때로 우리는이 규칙에 기인하는 특정 구현에서 동작을 계속 얻습니다. 여러 번 잘못되었습니다. 이 규칙은 정확히 무엇입니까? 표준은이 규칙을 섹션이나 단락으로 명확하게 언급하지 않습니다. 그렇다면 정확히이 규칙의 범위에 속하는 …
89 c++  c  optimization  c++-faq  as-if 


4
GDB : 변수가 같은 값이면 중단
변수가 내가 설정 한 값과 같을 때 GDB를 중단 점으로 설정하고 싶습니다.이 예제를 시도해 보았습니다. #include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) printf("%d\n", i); return 0; } GDB의 출력 : (gdb) break if ((int)i == 5) No default breakpoint address now. (gdb) run Starting program: /home/SIFE/run 0 1 …
89 c  gdb 

4
"휘발성"의 정의가 이처럼 변동성이 있습니까? 아니면 GCC에 표준 준수 문제가 있습니까?
(WinAPI의 SecureZeroMemory와 같은) 항상 메모리를 0으로 만들고 컴파일러가 그 후에는 메모리에 다시 액세스하지 않을 것이라고 생각하더라도 최적화되지 않는 함수가 필요합니다. 휘발성에 대한 완벽한 후보처럼 보입니다. 하지만 실제로 GCC와 함께 작동하는 데 몇 가지 문제가 있습니다. 다음은 함수의 예입니다. void volatileZeroMemory(volatile void* ptr, unsigned long long size) { volatile unsigned char* …
89 c++  c  gcc  standards 


3
스레드 세이프 vs 재진입
최근에 "Malloc 스레드가 안전한가요?" 라는 제목으로 질문을했습니다. , 그리고 그 안에서 "malloc이 재진입 할 ​​수 있습니까?"라고 물었습니다. 나는 모든 재진입이 스레드로부터 안전하다는 인상을 받았습니다. 이 가정이 잘못 되었습니까?

7
함수 포인터를 다른 유형으로 캐스팅
void (*)(void*)콜백으로 사용할 함수 포인터를 받는 함수 가 있다고 가정 해 보겠습니다 . void do_stuff(void (*callback_fp)(void*), void* callback_arg); 이제 다음과 같은 기능이 있다면 : void my_callback_function(struct my_struct* arg); 안전하게 할 수 있습니까? do_stuff((void (*)(void*)) &my_callback_function, NULL); 나는 이 질문 을 보았고 '호환 함수 포인터'로 캐스트 할 수 있다고 말하는 일부 …

9
C에서 nan과 inf를 사용하는 방법?
오류가있는 경우 nan 또는 inf를 반환 할 수있는 숫자 메서드가 있으며, 테스트 목적으로 상황이 올바르게 처리되고 있는지 확인하기 위해 일시적으로 nan 또는 inf를 반환하도록 강제하고 싶습니다. C에서 nan 및 inf 값을 생성 하는 신뢰할 수 있고 컴파일러 독립적 인 방법이 있습니까? 약 10 분 동안 인터넷 검색을 한 후 컴파일러 …
89 c  math 

2
vdso와 vsyscall은 무엇입니까?
나는했다 sudo cat /proc/1/maps -vv 출력을 이해하려고 시도하고 있는데 예상대로 메모리 매핑 세그먼트에 많은 공유 라이브러리가 매핑되는 것을 볼 수 있습니다. 7f3c00137000-7f3c00179000 r-xp 00000000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c00179000-7f3c00379000 ---p 00042000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c00379000-7f3c0037a000 r--p 00042000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c0037a000-7f3c0037b000 rw-p 00043000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c0037b000-7f3c00383000 r-xp 00000000 08:01 21237216 …
89 c  linux  linux-kernel  kernel  vdso 

10
const와 const volatile의 차이점
volatile새로운 값이 업데이트 될 때마다 변수를 선언하면 변수를 const다음과 같이 선언하면 해당 변수의 값은 변경되지 않습니다. 그러면 위와 같이 const volatile int temp; 변수 temp를 선언하는 용도는 무엇입니까 ? 다음과 같이 선언하면 어떻게됩니까 const int temp?
89 c  embedded 

10
CMake가 C ++로 링커 언어를 결정할 수 없습니다.
Visual Studio 2010과 Cygwin을 모두 사용하여 Windows 7 x64에서 cmake hello world 프로그램을 실행하려고하는데 둘 다 작동하지 않는 것 같습니다. 내 디렉토리 구조는 다음과 같습니다. HelloWorld -- CMakeLists.txt -- src/ -- -- CMakeLists.txt -- -- main.cpp -- build/ 나는 cd build다음을 수행하고 다음 cmake ..과 같은 오류가 발생합니다. CMake Error: …
89 c++  c  cmake 

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.