반응형

C 117

C에 유용한 GCC 플래그는 무엇입니까?

C에 유용한 GCC 플래그는 무엇입니까? 설정 이상-Wall, 및 설정-std=XXXC에서 사용할 수 있는 컴파일러 플래그는 그 밖에 어떤 것이 있습니까? 나는 특히 우발적인 유형의 불일치를 완전히 최소화하기 위해 추가 경고 및/또는 경우에 따라 경고를 오류로 전환하는 데 관심이 있습니다.여기 제 것이 있습니다. -Wextra,-Wall: 필수. -Wfloat-equal: 보통 부동 소수점 숫자의 동일성을 테스트하는 것은 좋지 않기 때문에 편리합니다. -Wundef: 초기화되지 않은 식별자가 에서 평가되는 경우 경고합니다.#if지시. -Wshadow: 로컬 변수가 다른 로컬 변수, 파라미터 또는 전역 변수를 가리거나 내장 함수가 음영 처리될 때마다 경고합니다. -Wpointer-arith: 함수의 크기나..

sourcecode 2022.08.10

왜 C99까지 선언과 코드를 혼합하는 것이 금지되었습니까?

왜 C99까지 선언과 코드를 혼합하는 것이 금지되었습니까? 저는 최근에 주로 C를 가르치는 대학 과정의 조교가 되었습니다.이 코스는 C90에서 표준화되어 있습니다.주로 컴파일러의 폭넓은 서포트에 의한 것입니다.이전 Java 경험을 가진 C newbies에게 매우 혼란스러운 개념 중 하나는 변수 선언과 코드가 블록(콤포지트 스테이트먼트) 내에 혼재되지 않을 수 있다는 규칙입니다. 이 제한은 C99로 마침내 해소되었습니다만, 애초에 왜 거기에 있었는지 아는 사람이 있을까요?가변 범위 분석을 단순화할 수 있습니까?프로그래머가 새로운 변수를 위해 스택을 확장해야 하는 프로그램 실행 지점을 지정할 수 있습니까? 나는 언어 디자이너들이 전혀 목적이 없다면 그러한 제한을 추가하지 않았을 것이라고 생각한다.C의 초기 ..

sourcecode 2022.08.09

최초의 C 컴파일러는 어떻게 작성되었습니까?

최초의 C 컴파일러는 어떻게 작성되었습니까? 최초의 C 컴파일러가 C로 작성되었다는 것이 사실입니까?그럼 어떻게 실행되고 편찬됐을까요?아니면 이 컴파일러는 어셈블리 언어로 작성되었습니까?그것은 C언어 역사에 대한 Dennis Ritchie의 글에서 꽤 잘 묘사되어 있다. 그가 거기에 쓴 글을 요약해서, 그의 글을 좀 더 세세하게 써라.C는 BCPL 언어에서 시작되었으며, Ken Thomson은 General Electricics 635 메인 프레임에서 실행되는 BCPL용 컴파일러에 액세스할 수 있었습니다.언어에 불만을 품은 Thomson은 BCPL을 사용하여 B 언어용 컴파일러를 작성했습니다.이것은 BCPL을 넘어서는 진화 단계로 BCPL의 기술적 문제를 일부 없앴습니다. 이들은 PDP-7 미니컴퓨터로 ..

sourcecode 2022.08.09

OpenCV(Hough 변환 또는 기타 기능에 기반)를 사용한 견고한(색상과 크기 불변) 원 검출 쓰기

OpenCV(Hough 변환 또는 기타 기능에 기반)를 사용한 견고한(색상과 크기 불변) 원 검출 쓰기 이미지에서 원을 찾기 위해 다음과 같은 매우 간단한 파이썬 코드를 작성했습니다. import cv import numpy as np WAITKEY_DELAY_MS = 10 STOP_KEY = 'q' cv.NamedWindow("image - press 'q' to quit", cv.CV_WINDOW_AUTOSIZE); cv.NamedWindow("post-process", cv.CV_WINDOW_AUTOSIZE); key_pressed = False while key_pressed != STOP_KEY: # grab image orig = cv.LoadImage('circles3.jpg') # crea..

sourcecode 2022.08.09

포인터 감산 혼란

포인터 감산 혼란 다른 포인터에서 포인터를 빼는 경우 차이는 바이트의 수와 동일하지 않지만 (정수를 가리키는 경우) 몇 개의 정수와는 동일합니다.왜 그럴까?그 아이디어는 당신이 메모리 블록을 가리키고 있다는 것입니다. +----+----+----+----+----+----+ | 06 | 07 | 08 | 09 | 10 | 11 | mem +----+----+----+----+----+----+ | 18 | 24 | 17 | 53 | -7 | 14 | data +----+----+----+----+----+----+ 가지고 계신 경우int* p = &(array[5])그리고나서*p14살이 됩니다.가는 중p=p-3만들 것이다*p열일곱 살이다. 그래서 만약에int* p = &(array[5])그리고.int *..

sourcecode 2022.08.09

LD_PRELOAD 메커니즘을 사용한 'malloc' 재정의

LD_PRELOAD 메커니즘을 사용한 'malloc' 재정의 malloc 호출을 stderr에 기록할 수 있는 간단한 공유 라이브러리를 작성하려고 합니다(원하신다면 'mtrace'의 일종입니다. 그러나 이것은 동작하지 않습니다.제가 하는 일은 다음과 같습니다. /* mtrace.c */ #include #include static void* (*real_malloc)(size_t); void *malloc(size_t size) { void *p = NULL; fprintf(stderr, "malloc(%d) = ", size); p = real_malloc(size); fprintf(stderr, "%p\n", p); return p; } static void __mtrace_init(void) __a..

sourcecode 2022.08.07

여러 스레드에서 stdlib의 rand() 사용

여러 스레드에서 stdlib의 rand() 사용 몇 개의 스레드가 모두 같은 기능을 수행합니다.이들 각각에서 서로 다른 난수를 여러 번 생성합니다.이렇게 하려고 했는데srand(time(0))처음에는 다 같은 번호인 것 같아요. 전화해야 하나요?srand(time(0))프로그램당 1회(즉, 시작 시)만main(예를 들어, 여러 번 호출된 각 함수의 시작 부분에서) 또는 다른 무엇인가가 있습니까?srand()는 난수 생성기를 시드합니다.전화만 하면 됩니다.srand(time(NULL))기동시에 1회. 즉, 문서에는 다음과 같이 기술되어 있습니다. 함수rand()는 각 콜에서 변경된 숨김 상태를 사용하기 때문에 재진입 또는 스레드 세이프가 아닙니다.이 값은 다음 콜에서 사용하는 시드 값일 수도 있고 더 정교..

sourcecode 2022.08.03

실제 예에서는 dup 또는 dup2를 사용합니다.

실제 예에서는 dup 또는 dup2를 사용합니다. 어떻게 하는지는 알지만 언제 사용할지는 모릅니다. 실용적인 예가 있나요? 고마워요.I/O 리다이렉션을 예로 들 수 있습니다.이를 위해 자녀 프로세스를 포크하고 stdin 또는 stdout 파일 기술자(0 및 1)를 닫은 다음 선택한 다른 파일 기술자(이 경우 0 또는 1)에서 dup()을 수행합니다. 이를 사용하여 응용 프로그램을 인식하지 못할 수 있는 모든 하위 프로세스를 실행할 수 있으며, 자녀가 stdout에 쓰기(또는 stdin에서 읽기)할 때마다 대신 제공된 파일 설명자에 데이터가 기록됩니다. 은 이를 를 들어 다음과 같습니다./bin/ls | morestdout stdin stdin stdin stdin stdin stdin stdown std..

sourcecode 2022.08.03

사용되지 않는 함수 매개 변수 값을 void로 캐스팅하는 이유는 무엇입니까?

사용되지 않는 함수 매개 변수 값을 void로 캐스팅하는 이유는 무엇입니까? C프로젝트에서 다음 코드를 본 적이 있습니다. static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { (void)ud; (void)osize; /* some code not using `ud` or `osize` */ return ptr; } 무효로 하는 두 개의 깁스가 무슨 의미가 있나요?일부 파라미터는 사용되지 않기 때문에 컴파일러의 경고를 피하기 위해 사용됩니다.프로토타입에 미사용 파라미터가 있는 이유는 보통 함수가 외부 API에 준거해야 하기 때문입니다.아마 라이브러리 함수이거나 이 호출규칙을 기대하는 다른 함수에 포인터가 전달됩니다.그러나 호출 ..

sourcecode 2022.08.03
반응형