반응형

c 30

C의 유사 제네릭

C의 유사 제네릭 저는 다양한 종류의 숫자 배열로 작업을 수행하는 몇 가지 방법을 구현해야 합니다.보통은 그 일에 제네릭을 사용하지만 C가 제공하지 않기 때문에 매크로를 사용하여 에뮬레이션을 시도하고 있습니다. 다음은 제가 하려는 일의 예입니다. #ifndef TYPE #define TYPE int #endif TYPE get_minimum_##TYPE (TYPE * nums, int len){ TYPE min = nums[0]; for (int i = 1; i < len; i++) { if (nums[i] < min) { min = nums[i]; } } return min; } 그러나 이것은 컴파일되지 않습니다.clang 오류 메시지: 오류: 최상위 수준 선언자 뒤에 ';'가 필요합니다. 이것을 C에..

programing 2023.10.10

포크, exec, wait를 올바르게 사용하는 방법

포크, exec, wait를 올바르게 사용하는 방법 내가 쓰고 있는 셸은 사용자가 준 프로그램을 실행해야 합니다.제 프로그램의 아주 단축된 단순화된 버전입니다. int main() { pid_t pid = getpid(); // this is the parents pid char *user_input = NULL; size_t line_sz = 0; ssize_t line_ct = 0; line_ct = getline(&user_input, &line_sz, stdin); //so get user input, store in user_input for (;;) { pid_t child_pid = fork(); //fork a duplicate process pid_t child_ppid = getppid..

programing 2023.10.05

C11 유형 계층 구조 이해

C11 유형 계층 구조 이해 C11 언어의 유형 계층 구조를 완전히 이해하고 그래픽으로 표현하고 싶습니다(트리 다이어그램이 완벽할 것입니다).이 표준은 이 문제에 대한 수치를 제공하지 않습니다. 즉, 개별 유형 및 유형 간의 관계를 설명하는 30개의 항목이 있습니다.그리고 싶습니다. 저의 시도는 ISO/IEC 9899:201x 위원회 초안 N1570을 입수하여 문서의 섹션 6.2.5에서 모든 필수 문구를 추출하는 것에서 시작되었습니다.그리고 나무의 형태로 지식을 재배열하기 시작했습니다.제 작품을 두 단계로 나누어 발표하겠습니다. 1단계: 포인트 1~15 추출된 지식(섹션 6.2.5 + 지정 생산): 1가지 유형 = 객체 유형 + 함수 유형; 표준 부호 정수 유형 4개 =signed char,short i..

programing 2023.09.25

gcc 디버그 기호(-g 플래그) vs linker's -rdynamic 옵션

gcc 디버그 기호(-g 플래그) vs linker's -rdynamic 옵션 glibc 제공backtrace()그리고.backtrace_symbols()실행 중인 프로그램의 스택 추적을 가져옵니다.하지만 이것이 작동하기 위해서는 링커의 프로그램을 사용해야 합니다.-rdynamic깃발을 올리다 사이의 차이점은 무엇입니까?-ggcc vs linker's에 전달된 플래그-rdynamicflag ? 샘플 코드의 경우 출력을 비교하기 위해 redelf를 했습니다.-rdynamic아래에서 더 많은 정보를 만들어 내는 것 같습니다.Symbol table '.dynsym'하지만 추가적인 정보가 무엇인지 잘 모르겠습니다. 설령 내가strip을 이용하여 만들어진 프로그램 바이너리.-rdynamic,backtrace_sy..

programing 2023.09.20

프로세서의 워드 크기 확인

프로세서의 워드 크기 확인 해야 ? CPU의 워드 크기를 합니까? 만약 제가 이해한다면int한 단어가 맞을까요?제가 맞는지 잘 모르겠습니다. ㅇㅇㅇ을 인쇄해야 .sizeof(int)제 프로세서의 워드 크기를 결정하기에 충분한가요?크기(int)에 대한 귀하의 가정은 사실이 아닙니다. 컴파일 시 프로세서, OS 및 컴파일러를 알아야 하므로 컴파일러에서 제공하는 사전 정의된 아키텍처/OS/컴파일러 매크로를 사용하여 단어 크기를 유추할 수 있습니다. 그러나 단순하고 대부분의 RISC 프로세서에서는 워드 크기, 버스 폭, 레지스터 크기 및 메모리 구성이 일관되게 하나의 값인 경우가 많지만 부동 소수점 레지스터, 누적기, 버스 폭, 캐시 폭, 범용 레지스터 등을 위한 다양한 크기를 가진 보다 복잡한 CISC 및 D..

programing 2023.09.15

C에서 문자열 리터럴의 "수명"

C에서 문자열 리터럴의 "수명" 다음 함수로 반환된 포인터는 액세스할 수 없는 것이 아닙니까? char *foo(int rc) { switch (rc) { case 1: return("one"); case 2: return("two"); default: return("whatever"); } } 따라서 C/C++에서 국소 변수의 수명은 사실상 함수 내에서만 가능합니다. 그렇죠?그 말은, 그 다음에char* foo(int)종료, 반환되는 포인터는 더 이상 아무 의미가 없습니다, 그렇죠? 저는 지역 변수의 수명에 대해 약간 혼란스럽습니다.무엇이 좋은 설명입니까?예, 로컬 변수의 수명이 범위 내에 있습니다({,}생성되는 위치입니다. 로컬 변수에는 자동 또는 로컬 저장소가 있습니다.자동: 작성된 범위가 종료되면..

programing 2023.08.31

왜 두 정수를 나누면 부동소수점을 얻을 수 없습니까?

왜 두 정수를 나누면 부동소수점을 얻을 수 없습니까? 이 질문에는 이미 다음과 같은 답이 있습니다. 1/n을 나누면 항상 0.0이 반환됩니다. (3개 답변) 마감됨10년 전에. b가 부동소수인데 정수로 나누면 왜 여기서 반올림이 되는지 설명할 수 있는 사람 있나요? #include void main() { int a; float b, c, d; a = 750; b = a / 350; c = 750; d = c / 350; printf("%.2f %.2f", b, d); // output: 2.00 2.14 } http://codepad.org/j1pckw0y이것은 암묵적인 변환 때문입니다.변수들b, c, d의 것입니다.float타이프. 그런데 그./연산자는 분할해야 하는 두 개의 정수를 보고 결과적으로 ..

programing 2023.08.26

코드의 일부를 비활성화하는 간단한 방법

코드의 일부를 비활성화하는 간단한 방법 이것은 특정한 문제를 해결하기 위한 전형적인 질문이 아니라 두뇌 운동입니다만, 해결책을 가지고 있는 사람이 있는지 궁금합니다. 개발 과정에서 코드의 일부를 비활성화하거나 전환하여 다른 접근 방식을 확인해야 하는 경우가 많습니다.이 작업을 수행하려면 주석을 사용합니다.#defines하지만 제가 가장 좋아하는 것은: //* [code here] //*/ 이제 첫 번째 슬래시만 제거하면 코드가 주석 처리됩니다. 질문: 유사한 if-else 코드 스위치를 구현할 수 있는 방법이 있습니까?저는 그것을 찾으려고 노력했지만 항상 문제가 있어서 해결책을 찾을 수 없었습니다. 그리고 여러분도 비슷한 묘기를 알고 있나요?를 드를다음감로으로 .#if 0하지만 코드를 활성화/비활성화하려..

programing 2023.07.27

소켓 - 할당된 포트 및 주소를 확인하는 방법

소켓 - 할당된 포트 및 주소를 확인하는 방법 저는 이것을 이해하는 데 어려움을 겪고 있습니다 - 저는 이 가이드를 사용하여 C의 소켓을 사용하고 있습니다 - http://binarii.com/files/papers/c_sockets.txt 다음을 사용하여 IP 및 포트를 자동으로 가져오려고 합니다. server.sin_port = 0; /* bind() will choose a random port*/ server.sin_addr.s_addr = INADDR_ANY; /* puts server's IP automatically */ ... ... bind(int fd, struct sockaddr *my_addr,int addrlen); // Bind function 바인딩에 성공한 후 실제로 할당된 ..

programing 2023.07.27

이 코드의 의미는 무엇입니까?void(*int sig, void(*func)(int))(int);

이 코드의 의미는 무엇입니까?void(*int sig, void(*func)(int))(int); 저는 이 코드를 우연히 발견했고 그것의 의미를 해석하는 것을 완전히 잃어버렸습니다. #include void (*signal(int sig, void (*func)(int)))(int); 2호선 코드에 대한 자세한 설명은 무엇입니까? 나는 그것을 알고 있습니다.void그리고.int*func는 함수의 포인터이며 괄호는 우선 순위를 나타냅니다.하지만 (*signal...), (int), 그리고 전체가 함께 결합된 것은 여전히 이해할 수 없습니다.세부적일수록 좋습니다. 아마도 나는 이 선언의 의미/효과를 알고 있었을 것입니다.하지만 저는 아래와 같이 무슨 일이 일어나고 있는지 이해하기 위해 몇 가지 더 실험을 해..

programing 2023.07.22
반응형