C 38

GCC 출력을 stdout으로 만드는 방법?

GCC 출력을 stdout으로 만드는 방법? 일반적으로 GCC는 다음을 통해 파일로 출력하도록 지시됩니다.-o스위치를 바꾸다만약 이것이 제공되지 않는다면 적절한 이름과 출력을 결정하는 것 같습니다.GCC가 생성된 출력을 stdout에 쓰도록 하려면 어떻게 해야 합니까?gcc -o /dev/stdout foo.c 참고:/dev/stdout다음과 같이 symlink로 정의됩니다./dev/stdout -> /proc/self/fd/1.-o-를 사용하여 어셈블리 목록을 인쇄할 수 있습니다. gcc -S -o- in.c 음, stdout에 버림받은 바이너리 오브젝트 파일은 어떻게 하실 건가요?어쨌든 일부 프로그램에서는 '-'(단일 빼기, 따옴표 없음) 문자를 stdout 대신 사용할 수 있습니다.리눅스를 사용한다..

source 2023.09.27

C의 여러 소스 파일은 정확히 어떻게 파일을 작동합니까?

C의 여러 소스 파일은 정확히 어떻게 파일을 작동합니까? 저는 C의 상대적인 초보자인데 파일을 만드는 방법을 배워야 하는데 C 파일의 조합이 어떻게 되는지 조금 혼란스럽습니다.메인, 축구장, 바가 있다고 치자main.c가 다른 파일의 기능을 인식할 수 있도록 코드를 어떻게 작성해야 합니까?또한, fo.c와 bar.c에서 메인 기능에 코드가 모두 작성되어 있습니까? 아니면 필요한 작업을 위해 다른 기능을 작성해야 합니까?make file이 어떻게 작성되는지에 대한 튜토리얼을 읽었고, 대부분의 경우 이해가 되지만, 그것의 기본적인 물류에 대해서는 아직 조금 혼란스럽습니다.일반적으로 발생하는 일은 헤더 파일에 다른 파일에 대한 함수를 정의하는 것이며, 이 파일은 main.c에 포함될 수 있습니다.예를 들어 다..

source 2023.09.27

JNI를 사용하여 문자열 배열을 Java에서 C로 전달

JNI를 사용하여 문자열 배열을 Java에서 C로 전달 저는 스트링 배열이 있어요.{"myname","yourname","hisname"}그리고 이 배열을 JNI를 이용해서 C로 보내려고 합니다.이에 대한 명확한 해결책을 찾을 수 없었습니다.나는 이 끈을 a로 받으려고 노력했습니다.chararray하지만 성공하지는 못합니다. 이것을 할 방법이 방법이 있습니까?당신은 간단한 함수를 작성할 수 있습니다.jobjectArrayobject, 각각의 것을 jstring에 캐스팅한 다음 호출GetStringUTFChars그 위에 다음과 같은 경우: void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) { int stringCount = ..

source 2023.09.27

glibc의 감가상각 __malloc_hook 기능에 대한 대안

glibc의 감가상각 __malloc_hook 기능에 대한 대안 , 는 C 를 을 를 를 를 는 를 malloc,realloc그리고.freemalloc_functions를 통해 합니다.안타깝게도, 다중 스레드 환경에서는 동작이 좋지 않기 때문에 사용이 권장되지 않습니다.동일한 것을 달성하기 위한 대안적인 모범 사례 솔루션을 설명하는 문서를 찾을 수 없었는데, 누군가 나를 깨우쳐 줄 수 있습니까? 간단한 글을 읽었습니다.#define malloc(s) malloc_hook(s)효과는 있겠지만, 프로파일링/추적 도구에 사용하기에 적합하기에는 원래 코드 기반에 너무 거슬리기 때문에 제가 염두에 둔 시스템 설정에서는 작동하지 않습니다.원래 애플리케이션 코드를 수동으로 변경해야 하는 것은 괜찮은 프로파일러에게는 ..

source 2023.09.17

C 전처리기에서 스트렌을?

C 전처리기에서 스트렌을? 구현이 가능한가요?strlen()C 전처리기에? 주어진: #define MYSTRING "bob" 전처리기 매크로가 있나요?X, 그럼 이렇게 말할 수 있겠네요 #define MYSTRING_LEN X(MYSTRING) 전처리기를 사용하지 않지만 의 크기는 컴파일 시 해결됩니다.문자열이 배열에 있는 경우 이를 사용하여 컴파일 시 문자열의 길이를 결정할 수 있습니다. static const char string[] = "bob"; #define STRLEN(s) (sizeof(s)/sizeof(s[0])) 기억해 두시오.STRLEN위에는 null terminator가 포함됩니다. 이는 달리strlen().다음을 수행할 수 있습니다. #define MYSTRING sizeof("bo..

source 2023.09.12

C의 구조 배열에서 'size of'의 결과는?

C의 구조 배열에서 'size of'의 결과는? C에서, 나는 다음과 같이 정의된 구조들의 배열을 가지고 있습니다: struct D { char *a; char *b; char *c; }; static struct D a[] = { { "1a", "1b", "1c" }, { "2a", "2b", "2c" } }; 배열의 요소 수를 결정하고 싶지만,sizeof(a)잘못된 결과를 반환합니다. 2가 아니라 48입니다.내가 뭔가 잘못하고 있는 것일까요, 아니면sizeof여기서 단순히 믿을 수 없는가요?문제가 된다면 GCC 4.4로 컴파일하겠습니다.sizeof크기는 요소 수가 아니라 바이트 단위로 제공됩니다.알록이 말했듯이, 요소의 수를 얻으려면 배열의 크기(바이트)를 한 요소의 크기(바이트)로 나눕니다.올바른 ..

source 2023.09.02

GCC를 사용하여 C 및 C++ 파일을 함께 컴파일

GCC를 사용하여 C 및 C++ 파일을 함께 컴파일 저는 GCC를 사용하여 C와 C++ 소스를 함께 컴파일하려고 합니다. gcc -std=c++0x test.cpp -std=c99 test.c -lstdc++ 두 번의 경고를 받는 것을 제외하고는, 이것은 잘 작동합니다. cc1plus: warning: command line option "-std=c99" is valid for C/ObjC but not for C++ cc1: warning: command line option "-std=c++0x" is valid for C++/ObjC++ but not for C 그래서 사용할 수 없습니다.-Werror이 설정을 사용합니다.이러한 경고를 어떻게든 억제할 수 있습니까?파일을 별도로 컴파일하고 g++로..

source 2023.08.18

분할 오류와 스택 오버플로의 차이점은 무엇입니까?

분할 오류와 스택 오버플로의 차이점은 무엇입니까? 예를 들어, 재귀 함수를 호출하면 연속 호출이 스택에 저장됩니다.그러나 무한정 계속되는 경우 오류로 인해 오류는 '세그먼트화 결함'입니다(GCC에 표시됨). '스택 오버플로'였어야 하지 않았나요?그렇다면 둘 사이의 기본적인 차이점은 무엇입니까? 하지만 위키백과 링크보다 설명이 더 도움이 될 것입니다(그 과정을 거쳤지만, 구체적인 질문에 대한 답변은 없음).스택 오버플로가 [a] 원인이며 분할 결함이 결과입니다. 적어도 x86 및 ARM에서 "스택"은 함수 호출의 로컬 변수 및 반환 주소를 배치하기 위해 예약된 메모리입니다.스택이 모두 사용되면 예약 영역 외부의 메모리에 액세스합니다.그러나 앱이 커널에 이 메모리를 요청하지 않았기 때문에 메모리 보호를 위해..

source 2023.07.29

c 또는 c++로 매우 큰 단일 메모리 청크(> 4GB)를 할당할 수 있습니까?

c 또는 c++로 매우 큰 단일 메모리 청크(> 4GB)를 할당할 수 있습니까? 요즘 RAM 용량이 매우 커서 4GB보다 큰 메모리를 하나 할당할 수 있습니까?아니면 여러 개의 작은 청크를 할당하여 청크 간의 전환을 처리해야 합니까? 왜요? 저는 오픈 스트리트맵 xml 데이터를 처리하는 일을 하고 있는데 이 파일들은 매우 큽니다.한 덩어리에 다 실을 수 없어서 지금 스트리밍 중인데 malloc이나 new 상한선이 궁금해서요. 단답: 그럴 가능성은 없습니다. 이 기능이 작동하려면 64비트 프로세서를 사용해야 합니다.둘째, 단일 프로세스에 4G 이상의 RAM을 할당하기 위한 운영 체제 지원에 의존합니다. 이론적으로는 가능하지만 메모리 할당기에 대한 설명서를 읽어야 합니다.또한 메모리 조각화 문제에 더 취약할..

source 2023.06.19

(다른 플랫폼에서) NDEBUG 전처리기 매크로는 무엇에 사용됩니까?

(다른 플랫폼에서) NDEBUG 전처리기 매크로는 무엇에 사용됩니까? 다양한 플랫폼/컴파일러("구현")/프레임워크가 C와 C++ 프리프로세서 매크로에 어떤 목적으로 할당되는지 관심이 있습니다.NDEBUG. C와 C++ 표준은 이 정의를 한 번만 언급합니다. 즉, 동작을 제어하는 것입니다.assert()거시적인 C 또는 C++용 특정 플랫폼/프레임워크/라이브러리가 다음을 사용한다는 것을 알고 있는 특정 답변만 포함할 것을 요청합니다.NDEBUG표준 정의 매크로 외에 다른 모든 것을 활성화하거나 비활성화할 수 있습니다. 이 질문을 하는 한 가지 이유는 MS(Visual-C++)가 디버그와 릴리스 항목을 구별하기 위해 항상 "그들의" 정의를 사용하기 때문입니다. 저는 이것이 라이브러리/플랫폼이 "자신의" 디버..

source 2023.06.14