C 34

C의 동일한 디렉토리에 있는 다른 파일에서 함수 호출

C의 동일한 디렉토리에 있는 다른 파일에서 함수 호출 저는 C를 배우고 있지만 자바와 같은 상위 프로그래밍 언어에 대한 오랜 경험이 있습니다. 헤더 파일에 대해 읽고 있어서 가지고 놀고 있었는데 #포함 없이 다른 파일에서 함수를 호출할 수 있다는 것을 알게 되었습니다(같은 디렉토리에 있음). 어떻게 가능합니까?!그런 식으로 구성된 것은 make file, linker입니까? 아니면 무엇입니까? 두개의 파일이 있습니다. main.c add.c main.c는 함수를 호출합니다.add(int x,int y)add.c에서 왔는데, #include add.c 전에 실수로 #include add.c 전에 컴파일을 잘못해서 작동했어요! 더 헷갈리는 것은 i#include add.c를 include할 때 함수 add에..

programing 2023.11.05

셸의 파이프로 n개의 명령어를 연결?

셸의 파이프로 n개의 명령어를 연결? 저는 C에 쉘을 구현하려고 합니다.간단한 execvp()로도 간단한 명령을 잘 실행할 수 있지만 요구 사항 중 하나는 다음과 같은 명령을 관리하는 것입니다. "ls -l | head | tail -4"는 'for' 루프와 stdin 및 stdout을 리디렉션하는 하나의 'pipe()' 문만 있는 것입니다.며칠이 지나니 길을 좀 잃었군요. N = 단순 명령의 수(예에서 3개: ls, head, tail) 명령 = 다음과 같은 명령이 포함된 구조물 목록: commands[0].argv[0]: ls commands[0].argv[1]: -l commands[1].argv[0]: head commands[2].argv[0]: tail commands[2].argv[1]: -..

programing 2023.11.05

C에서 printf() 함수의 반환 값

C에서 printf() 함수의 반환 값 그printf()함수는 인쇄된 문자 수를 반환합니다.그런데 아래 코드에는 왜 5를 인쇄하고 있는 것입니까? int a=1000; printf("%d",printf("\n%d",a)); 1000자는 한 번에 한 칸씩 인쇄하기 때문에 모두 5자입니다. "1000 2"를 출력해야 합니다.하지만 "1000 5"를 출력하고 있습니다.출력되는 문자 수는 5자입니다.10004자 입니다.\n한 캐릭터 입니다. printf"items" 출력의 수를 반환하지 않습니다.scanf함수 패밀리는 입력에 대해 수행합니다.실제 문자 수를 반환합니다.내부 호출이 먼저 발생하여 5자를 인쇄합니다(\n,1,0,0,0) 및 반품5. 그러면 외부 호출이 발생하고, 출력합니다.5내부 호출로 돌아온 겁니..

programing 2023.10.31

함수 포인터의 용도는 무엇입니까?

함수 포인터의 용도는 무엇입니까? 이 질문에는 이미 다음과 같은 답변이 있습니다. 닫힘11년 전에. 중복 가능: 함수 포인터의 요점은 무엇입니까? 나는 실제 시나리오에서 함수 포인터가 어디에 사용되는지 이해하려고 합니다.그리고 누가 나에게 다른 함수에 대한 논쟁으로서 함수 자체를 전달해야 하는 실용적인 예를 들어줄 수 있습니까?함수 포인터는 콜백 메커니즘을 만들고 싶을 때 유용할 수 있으며 함수의 주소를 다른 함수에 전달해야 합니다. 함수 배열을 저장할 때도 유용할 수 있습니다. 예를 들어 동적으로 호출할 때도 사용할 수 있습니다.콜백 루틴은 지금까지 제시된 가장 일반적인 시나리오인 것으로 보입니다.하지만, 다른 많은 사람들이 있습니다. (다차원) 배열의 요소가 다음 상태를 처리/처리하는 루틴을 나타내는..

programing 2023.10.31

Android ndk/jni와 함께 C++ 사용

Android ndk/jni와 함께 C++ 사용 모든 ndk 샘플은 헤더에 extern으로 선언되고 cpp 파일에 정의된 기본 C 함수만 사용합니다.그러면 jni callback이 포함된 C 파일에 헤더 파일을 포함시킨 후에는 모든 것이 정상적으로 동작합니다. 안드로이드 ndk로 C++ 클래스를 사용할 수 있나요?제 애플리케이션은 네이티브 액티비티가 아니라 여전히 중요한 자바 부분을 가지고 있지만 CPU 집약적인 계산을 위해 네이티브 C 코드를 호출할 것입니다(클래스 및 기타 C++ 항목이 있는 C++로 이미 작성됨). 지금은 구조물과 같은 나의 헬로 월드를 소개합니다. 먼저 파일을 작성합니다.h" #ifndef FIRST_H #define FIRST_H class Test {}; #endif /* FI..

programing 2023.10.31

응용프로그램별 링커 스크립트에 정의된 접근 기호

응용프로그램별 링커 스크립트에 정의된 접근 기호 링커 스크립트 파일에서 두 개의 기호를 정의했습니다. define symbol _region_RAM_start__ = 0xC0000000; define symbol _region_RAM_end__ = 0xC00fffff; 그 후 아래와 같이 수출했습니다. export symbol _region_RAM_start__; export symbol _region_RAM_end__; 애플리케이션 코드에서 이 기호들에 접근하려고 합니다. extern const unsigned int _region_RAM_start__; extern const unsigned int _region_RAM_end__; .... int GetRAMSize() { int size = 0; ..

programing 2023.10.26

numpy/ctype을 사용하여 C-할당 메모리 버퍼를 노출하는 보다 안전한 방법은?

numpy/ctype을 사용하여 C-할당 메모리 버퍼를 노출하는 보다 안전한 방법은? 공유 메모리 버퍼를 사용하여 내부 상태를 저장하는 C 라이브러리의 파이썬 바인딩을 작성합니다.이러한 버퍼의 할당 및 해제는 라이브러리 자체에서 Python 외부에서 수행되지만, Python 내에서 wraped constructor/destructor 함수를 호출하여 간접적으로 제어할 수 있습니다.일부 버퍼를 Python에 노출시켜서 데이터를 읽을 수 있도록 하고, 경우에 따라서는 값을 Python에 푸시하고 싶습니다.성능과 메모리 사용은 중요한 문제이므로 가능한 한 데이터 복사를 피하고 싶습니다. 현재 접근 방식은 actype 포인터에 직접 보기를 제공하는 numpy 배열을 만드는 것입니다. import numpy as..

programing 2023.10.26

stdout 및 stdin 파일 설명자를 닫은 후 다시 열기

stdout 및 stdin 파일 설명자를 닫은 후 다시 열기 인수가 주어지면 stdout을 파일로 리디렉션하거나 파일에서 stdin을 읽어오는 함수를 씁니다.이렇게 하려면 stdout 또는 stdin과 관련된 파일 설명자를 닫아서 파일을 열 때 방금 닫았던 설명자 아래에서 열립니다.이것은 효과가 있지만 문제는 이것이 완료되면 stdout과 stdin을 실제 상태로 복원해야 한다는 것입니다. stdout에 대해 내가 할 수 있는 일은 열려 있습니다("/dev/tty", O_WRONLY). 하지만 왜 이것이 작동하는지 잘 모르겠고, 더 중요한 것은 stdin에 대한 동등한 문에 대해 알지 못합니다. 그래서 나는 포레스트 아웃을 close(1); if (creat(filePath, O_RDWR) == -1) ..

programing 2023.10.26

ARM: 링크 레지스터 및 프레임 포인터

ARM: 링크 레지스터 및 프레임 포인터 ARM에서 링크 레지스터와 프레임 포인터가 어떻게 작동하는지 이해하려고 합니다.몇 군데 다녀왔는데 이해를 확인하고 싶었습니다. 다음 코드가 있다고 가정해 보겠습니다. int foo(void) { // .. bar(); // (A) // .. } int bar(void) { // (B) int b1; // .. // (C) baz(); // (D) } int baz(void) { // (E) int a; int b; // (F) } 그리고 foo()라고 부릅니다.링크 레지스터에 (A) 지점의 코드 주소가 포함되고 프레임 포인터에 (B) 지점의 코드 주소가 포함됩니까?그리고 스택 포인터는 모든 로컬이 선언된 후에 bar() 내부의 아무 곳에나 있을 수 있습니다.일부 ..

programing 2023.10.21

C 포인터 및 배열: [Warning] 할당은 캐스트가 없는 정수에서 포인터를 만듭니다.

C 포인터 및 배열: [Warning] 할당은 캐스트가 없는 정수에서 포인터를 만듭니다. 문 닫았습니다.이 질문은재현성이 없거나 오타로 인해 발생했습니다.현재 답변을 받지 않고 있습니다. 이 질문은 오타나 더 이상 재현할 수 없는 문제로 인해 발생했습니다.비슷한 질문이 여기서 주제가 될 수 있지만, 이 질문은 미래의 독자들에게 도움이 될 가능성이 적은 방식으로 해결되었습니다. 9년전에 문을 닫았습니다. 이 질문을 개선합니다. C의 포인터와 배열에 문제가 있습니다.코드는 다음과 같습니다. #include int *ap; int a[5]={41,42,43,44,45}; int x; int main() { ap = a[4]; x = *ap; printf("%d",x); return 0; } 코드를 컴파일하고 ..

programing 2023.10.21