반응형

C 31

C/C++ 공유 메모리에서 대기 후 알림

C/C++ 공유 메모리에서 대기 후 알림 둘 이상의 스레드 사이의 공유 메모리에 대해 자바 In C/C++에서처럼 기다렸다가 통지하는 방법은?pthread 라이브러리를 사용합니다.대기/알림에 사용할 Java 객체 대신 뮤텍스와 조건 변수라는 두 개의 객체가 필요합니다.이들은 다음과 같이 초기화됩니다.pthread_mutex_init그리고.pthread_cond_init. 자바 객체에서 동기화를 했을 경우 다음을 사용합니다.pthread_mutex_lock그리고.pthread_mutex_unlock(C에서는 직접 수동으로 쌍을 구성해야 합니다.)대기/알림이 필요 없는 경우 잠금/잠금 해제만 하면 조건 변수는 필요 없고 뮤텍스만 필요합니다.음소거가 반드시 "재귀적"일 필요는 없다는 것을 명심하십시오. 이는 ..

programing 2023.09.27

printf의 가변 크기 패딩

printf의 가변 크기 패딩 다양한 크기의 패딩을 사용할 수 있는 방법이 있습니까?printf? 패딩의 크기를 나타내는 정수가 있습니다. void foo(int paddingSize) { printf("%...MyText", paddingSize); } 이것은 출력될 것입니다.### MyText여기서 paddingSize는 '#' 기호의 수를 결정해야 합니다.예, 사용하시면*형식 문자열에서 인수로부터 번호를 가져옵니다. printf ("%0*d\n", 3, 5); "005"를 인쇄합니다. 공백이나 0으로만 패드를 넣을 수 있습니다.다른 것으로 패드를 고정하려면 다음과 같은 것을 사용할 수 있습니다. #include #include int main (void) { char *s = "MyText"; un..

programing 2023.09.17

CLOWER_Bound 구현

CLOWER_Bound 구현 여기서 발견된 다음 정의에 기초하여 값보다 작은 값을 비교하지 않는 정렬된 범위 [처음, 마지막]의 첫 번째 요소를 가리키는 반복기를 반환합니다.첫 번째 버전의 경우 연산자 upperIndex is one beyond the last inclusive index as is the case with C++ signature. lower_bound(a, 0, 2,1) would return 0. lower_bound(a, 0, 3,6) would return 3; lower_bound(a, 0, 4,6) would return 3; 내가 시도한 코드는 다음과 같습니다. int low_bound(int low, int high, int e) { if ( low < 0) return..

programing 2023.09.12

의 크기가 피연산자 배열의 크기를 어떻게 알 수 있습니까?

의 크기가 피연산자 배열의 크기를 어떻게 알 수 있습니까? 이것은 바보 같은 질문일 수도 있지만 배열의 요소 양을 전달하지 않을 때 연산자의 크기가 배열 피연산자의 크기를 어떻게 알 수 있습니까?어레이의 전체 요소를 반환하는 것이 아니라 바이트 단위의 크기를 반환한다는 것은 알고 있지만, 어레이가 언제 종료되는지는 여전히 알아야 합니다.이게 어떻게 작동하는지 궁금할 뿐입니다.sizeof컴파일 시 해석되며 컴파일러는 배열이 어떻게 선언되었는지(따라서 얼마나 많은 공간을 차지하는지) 알고 있습니다.호출sizeof동적으로 변환된 배열에서는 배열의 끝점이 지정되지 않았기 때문에 원하는 작업을 수행하지 않을 가능성이 높습니다.이 문제를 이해하는 데 어려움을 겪는 근본적인 문제는 많은 사람들이 그러하듯이 배열과 포..

programing 2023.09.12

C++ 지정 이니셜라이저와 동등합니까?

C++ 지정 이니셜라이저와 동등합니까? 최근에 저는 임베디드 장치에 대해 작업하고 있습니다. 컴파일 시 초기화해야 하는 구조와 유니언이 있으므로 수정할 필요가 없는 특정 항목을 플래시 또는 ROM에 보관하고 약간의 성능 비용으로 플래시 또는 SRAM을 절약할 수 있습니다.현재 코드는 유효한 C99로 컴파일되지만, 이 조정이 없으면 C++ 코드로도 컴파일되었으며, 그렇게 컴파일되는 것도 지원하면 좋을 것입니다.이를 방지하는 핵심 사항 중 하나는 C++의 C 하위 집합 내에서 작동하지 않는 C99 지정 이니셜라이저를 사용한다는 것입니다.저는 C++ 버프를 별로 좋아하지 않기 때문에 C++ 호환 C 또는 컴파일 시 초기화를 허용하여 SRAM에서 프로그램 시작 후 구조와 유니언을 초기화할 필요가 없도록 하는 간..

programing 2023.08.08

VSCODE에서 "sudo"로 프로그램을 디버깅하는 방법

VSCODE에서 "sudo"로 프로그램을 디버깅하는 방법 VSCODE에서 프로그램을 디버깅하려고 합니다.Ubuntu에서 루트 또는 "sudo"와 함께 프로그램을 시작해야 합니다.이것을 달성하는 가장 좋은 방법은 무엇입니까?예제 시작 구성이 도움이 됩니다.감사해요.저는 최근에 비슷한 상황에 처해 있었습니다. 저는 .vscode 디렉토리 아래에 있는 launch.json 파일에 {"sudo": true}를 추가하여 해결했습니다. 방금 .sysode>syslog.json에서 다음 행을 추가했습니다. { "version": "0.2.0", "configurations": [ { "other..." : "configs...", "request": "launch", "console": "integratedTermi..

programing 2023.07.24

/usr/bin/ld: makefile로 컴파일하는 동안 -lc를 찾을 수 없습니다.

/usr/bin/ld: makefile로 컴파일하는 동안 -lc를 찾을 수 없습니다. 컨텍스트 먼저:헤더(event.h), event.c라는 프로그램, 메인 프로그램 main.c가 있습니다.이 프로그램은 컴파일되어 먼저 개체 프로그램(event.o)을 생성한 다음 별도의 폴더에 있는 정적 라이브러리(libevent.a)를 생성하고 실행 프로그램 work1.exe를 생성합니다. 이 작업을 수행하기 위해 다음 makefile을 만들었습니다. work1 : main.c libevent.a gcc -static main.c -L./lib -levent -o work1 -Wall event.o: event.c gcc -c event.c -Wall libevent.a: event.o ar rcs lib/libeve..

programing 2023.06.19

C에서 64비트 컴파일을 검색하는 중

C에서 64비트 컴파일을 검색하는 중 C 매크로 또는 C에서 컴파일할 때 C 프로그램이 64비트 또는 32비트로 컴파일되었는지 확인할 수 있는 방법이 있습니까? 컴파일러: 확인해야 하는 GCC 운영 체제: 유닉스/리눅스 또한 OS가 64비트를 지원하는지 프로그램을 실행할 때 어떻게 확인할 수 있습니까?이 "gcc"에 태그를 달았으니, 시도해 보십시오. #if __x86_64__ /* 64-bit */ #endif 다음은 x86 또는 다른 어떤 것도 가정하지 않는 정확한 휴대용 테스트입니다. #include #if UINTPTR_MAX == 0xffffffff /* 32-bit */ #elif UINTPTR_MAX == 0xffffffffffffffff /* 64-bit */ #else /* wtf */ ..

programing 2023.06.19

문자 배열/문자열은 바이너리 파일에 어떻게 저장됩니까?

문자 배열/문자열은 바이너리 파일에 어떻게 저장됩니까? 다른 컴파일러를 사용하여 이 코드를 컴파일하고 16진수 편집기에서 출력을 검사할 때 "낸시" 문자열을 어딘가에서 찾을 것으로 예상됩니다. #include int main() { char temp[6] = "Nancy"; printf("%s", temp); return 0; } 다음에 대한 출력 파일gcc -o main main.c다음과 같이 표시됩니다. 에 대한 출력g++ -o main main.c"낸시"를 찾을 수가 없어요. 비주얼 스튜디오(MSVC 1929)에서 동일한 코드를 컴파일하면 16진수 편집기에 전체 문자열이 표시됩니다. (1)의 문자열 중간에 랜덤 바이트가 있는 이유는 무엇입니까?컴파일러가 생성하는 출력 파일에 데이터를 저장하는 방법에..

programing 2023.06.09

c 정수의 get nth 바이트

c 정수의 get nth 바이트 첫 번째 바이트는 다음을 사용하여 얻을 수 있습니다. int x = number & ((1 (8*n)) & 0xff; 여기서 n은 첫 번째 바이트의 경우 0, 두 번째 바이트의 경우 1 등입니다.(n+1)번째 바이트가 메모리에 나타나는 순서에 상관없이 (x86과 같은 리틀 엔디언 기계에서는 가장 작은 것에서 가장 중요한 것이기도 함): int x = ((unsigned char *)(&number))[n]; 빅 엔디언 시스템에서 최하위에서 최상위까지의 (n+1)번째 바이트의 경우: int x = ((unsigned char *)(&number))[sizeof(int) - 1 - n]; 최소에서 최대 유의(모든 엔디안)까지 (n+1)번째 바이트의 경우: int x = ((u..

programing 2023.06.09
반응형