C 38

gcc는 정적 변수를 자동으로 0으로 초기화합니까?

gcc는 정적 변수를 자동으로 0으로 초기화합니까? 함수에 정적 변수가 선언되었지만 초기화되지 않았습니다.이 변수가 자동으로 0으로 초기화됩니까? static int idx; 예 - C 표준 ISO/IEC 9899:1999 a.k.a.C99(및 C++) 표준은 이에 해당한다고 말합니다.정확한 텍스트는 WG14 N1256 섹션 6.7.8("초기화")의 항목 10을 참조하십시오. 다른 사람들이 지적한 것처럼 항상 정적 변수를 초기화하는 것이 좋습니다. static int idx = 0; 이렇게 하는 이유는 일부 컴파일러가 정적 변수를 항상 0으로 초기화하지 않기 때문이 아닙니다(이러한 초기화에 실패한 컴파일러는 종단적으로 고장나 C 또는 C++ 컴파일러라고 주장할 수 없음), 이것은 Say What You ..

source 2023.11.06

메인 스레드가 종료되면 다른 스레드도 종료됩니까?

메인 스레드가 종료되면 다른 스레드도 종료됩니까? 같은 과정에서 메인 쓰레드와 다른 쓰레드에 문제가 있습니다.메인 기능이 돌아오면 다른 스레드도 종료됩니까?저는 이것에 대해 혼란스럽습니다. 다음 테스트 코드를 고려합니다. void* test1(void *arg) { unsigned int i = 0; while (1){ i+=1; } return NULL; } void* test2(void *arg) { long double i = 1.0; while (1){ i *= 1.1; } return NULL; } void startThread ( void * (*run)(void*), void *arg) { pthread_t t; pthread_attr_t attr; if (pthread_attr_init(&..

source 2023.11.06

malloc() 통화량을 최소화하면 성능이 향상됩니까?

malloc() 통화량을 최소화하면 성능이 향상됩니까? malloc()를 여러 번 호출하는 (1번) 애플리케이션과 malloc()를 몇 번 호출하는 (2번) 애플리케이션을 생각해 보십시오.두 응용 프로그램 모두 동일한 양의 메모리를 할당합니다(100MB로 가정). 다음 malloc() 호출은 #1과 #2 중 어느 애플리케이션에서 더 빠를까요? 즉,malloc()는 메모리에 할당된 위치의 인덱스를 가지고 있습니까?당신은 두가지 질문을 했습니다. 다음 malloc () 호출은 1번과 2번 중 어느 애플리케이션에서 더 빠를까요? 즉,malloc()는 메모리에 할당된 위치의 인덱스를 가지고 있습니까? 당신은 그들이 같은 질문이라고 암시했지만, 그렇지 않습니다.후자의 질문에 대한 답은 YES입니다. 어느 쪽이 더..

source 2023.11.06

메모리에서 FLOOT 번호를 C로 표현하는 방법

메모리에서 FLOOT 번호를 C로 표현하는 방법 튜토리얼을 읽다가 Float number를 메모리에 표현하는 방법을 발견했습니다.자습서에는 부동 소수점 번호가 포함된 예제가 있습니다. float a=5.2 with below Diagram 위 도표에서 이 5.2가 어떻게 이진법으로 변환되고 메모리에 어떻게 표현되는지 누가 말해줄 수 있습니까?앞서 말한 것처럼 5.2는 부호 비트, 지수 및 가수로 표현됩니다.5.2를 어떻게 인코딩합니까? 5는 쉽습니다. 101. 나머지 0.2는 1/5이니 나누세요.1.00000...(hex) 5시까지 당신은0.3333333...(16진수). (이는 한 가지만 덜 고려한다면 더 쉽게 따라 할 수 있습니다.0.FFFF...→F / 5 = 3, 그래서 쉽게 알 수 있습니다.0...

source 2023.11.06

C의 포인터 크기 가져오기

C의 포인터 크기 가져오기 C에서 포인터의 크기를 가져오려면 어떻게 해야 합니까?sizeof? 가리키는 값이 아닌 포인터를 저장하기 위해 메모리를 할당하려고 합니다.임의 유형이 주어졌을 때(선택했습니다)char여기에, 그러나 그것은 구체적인 예를 위해서입니다): char *p; 다음 표현 중 하나를 사용할 수 있습니다. sizeof(p) sizeof(char *) A로 이어짐malloc()다음과 같은 호출: char **ppc = malloc(sizeof(char *)); char **ppc = malloc(sizeof(p)); char **ppc = malloc(sizeof(*ppc)); 마지막 버전은 다음과 같은 유형의ppc변경하면 식을 통해 올바른 공간을 할당할 수 있습니다.이렇게 하면 효과가 있을..

source 2023.11.01

2-D 배열 앨리어싱 시 예기치 않은 스트렐렌 최적화

2-D 배열 앨리어싱 시 예기치 않은 스트렐렌 최적화 여기 내 코드가 있습니다. #include #include typedef char BUF[8]; typedef struct { BUF b[23]; } S; S s; int main() { int n; memcpy(&s, "1234567812345678", 17); n = strlen((char *)&s.b) / sizeof(BUF); printf("%d\n", n); n = strlen((char *)&s) / sizeof(BUF); printf("%d\n", n); } gcc 8.3.0 또는 8.2.1을 제외한 모든 최적화 레벨에서 사용-O0, 이 산출물들0 2내가 예상하고 있던 때에2 2. 컴파일러는 다음과 같이 결정했습니다.strlen에 국한됩니..

source 2023.11.01

조건문과 3항 연산자를 사용하지 않고 C에서 최대 3개의 숫자 찾기

조건문과 3항 연산자를 사용하지 않고 C에서 최대 3개의 숫자 찾기 저는 사용자가 제공하는 최대 3개의 번호를 찾아야 하지만 몇 가지 제한이 있습니다.조건문은 사용할 수 없습니다.아래와 같이 ternary operator를 사용해 보았습니다. max=(a>b?a:b)>c?(a>b?a:b):c 하지만 역시 삼원 연산자를 사용하는 것은 제한적입니다.이제 어떻게 하는지 전혀 모르겠어요?부울 식에서 단락의 이점 활용: int max(int a, int b, int c) { int m = a; (m < b) && (m = b); //these are not conditional statements. (m < c) && (m = c); //these are just boolean expressions. return..

source 2023.11.01

호출기능의 파일명, 회선번호, 함수명 출력 - C Prog

호출기능의 파일명, 회선번호, 함수명 출력 - C Prog info(), debug(), error() 함수가 포함된 log.c 파일을 만들고 싶습니다.이러한 기능은 파일 이름, 라인 번호 등을 인쇄하지 않고 작동합니다.그래서 이 기능 중 하나를 호출할 때 호출자의 파일명, 회선번호, 기능명을 덤프하고 싶습니다.정확히 어떻게 역추적을 할 수 있죠?C를 역추적할 수 있는 방법이 있나요, 아니면 매크로를 사용한다면 어떻게 할 수 있나요?매개 변수를 통해 데이터를 함수에 전달합니다(매크로의 도움을 받을 수도 있음). int info(const char *fname, int lineno, const char *fxname, ...) { /* ... */ } int debug(const char *fname, i..

source 2023.10.27

배열에서 요소를 빠르게 교체하는 방법 - C

배열에서 요소를 빠르게 교체하는 방법 - C 예를 들어 다음과 같은 int가 있다고 가정해 보겠습니다. const int size = 100000; int array[size]; //set some items to 0 and other items to 1 123456과 같이 1의 값을 가지는 모든 아이템을 다른 값으로 교체하고 싶습니다.이는 다음과 같은 간단한 방법으로 구현할 수 있습니다. for(int i = 0; i < size ; i++){ if(array[i] != 0) array[i] = 123456; } 호기심 때문에, x86 속임수 같은 것으로 이것을 하는 더 빠른 방법이 있을까요, 아니면 이것이 프로세서에 가장 적합한 코드일까요?처음에 0과 1이 있는 특정한 경우에는 다음이 더 빠를 수 있..

source 2023.10.27

make로 여러 C 파일을 컴파일합니다.

make로 여러 C 파일을 컴파일합니다. (저는 리눅스 Ubuntu 9.10을 실행하고 있으므로 실행 파일의 확장자는 executablefile.out입니다.) 저는 C에서 모듈식 프로그래밍(여러 파일로 프로그래밍)을 막 시작하고 있는데 하나의 makefile에서 여러 파일을 컴파일하는 방법을 알고 싶습니다.예를 들어 main.c, dbAdapter.c, dbAdapter.h 파일을 컴파일할 makefile은 무엇입니까? (그런데 아직 파악하지 못하셨다면 메인 기능이 main.c입니다.) 또한 누군가 makefile의 문서에 대한 링크를 올려주실 수 있나요?게시된 링크는 모두 좋습니다.특정한 경우에는 이것을 시도해 볼 수 있습니다.기본적으로 모든 파일 만들기가 이 패턴을 따릅니다.그 밖의 모든 것은 단축..

source 2023.10.27