반응형

C 251

순수 C에 RAII를 구현하시겠습니까?

순수 C에 RAII를 구현하시겠습니까? 순수 C에서 RAII를 구현하는 것이 가능한가? 나는 그것이 제정신으로는 불가능하다고 생각하지만, 아마도 어떤 비열한 속임수를 써서 가능할까?표준 과부하free함수가 떠오르거나 혹은 함수가 돌아올 때, 어떻게든 자원을 방출하는 다른 함수를 호출하도록 스택의 반환 주소를 덮어쓰거나 하는 일이 떠오른다.아니면 setjmp/longjmp 속임수로? 이것은 순전히 학문적인 관심사여서 나는 실제로 그렇게 휴대하기 힘들고 미친 코드를 쓸 생각은 전혀 없지만, 나는 그것이 가능한지 궁금하다.이 기준서는 그러한 가능성을 포함하지 않기 때문에 내재적인 적용에 의존한다.의 의우.cleanup특성은 변수가 범위를 벗어날 때 함수를 실행한다. #include void scoped(int..

programing 2022.05.14

C/C++ 컴파일러에 대한 최적의 컴파일러 경고 수준?

C/C++ 컴파일러에 대한 최적의 컴파일러 경고 수준? 휴관. 이 질문은여론에 근거한그것은 현재 답을 받아들이고 있지 않다. 이 문제를 개선하고 싶으십니까?이 게시물을 편집하여 사실과 인용문으로 답변할 수 있도록 질문을 업데이트하십시오. 2년 전에 문을 닫았다. 이 질문 개선 다른 C/C++ 컴파일러에 대해 권장하는 컴파일러 경고 수준은? gcc와 g+++는 기본 레벨에서 많은 것을 얻을 수 있게 해줄 것이다.나에게 가장 좋은 경고 수준은 '-월'이라고 생각한다.그리고 나는 항상 그것이 발생시키는 경고에 대한 코드를 제거하려고 노력한다. (논리적 우선 순위 규칙에 괄호를 사용하는 것에 대한 바보 같은 것들 조차도 '만약 (x = y))'를 의미한다고 말한다. Sun CC, aCC(HPUX), Visual..

programing 2022.05.13

힙 메모리(malloc/new)를 사용하면 비결정론적 프로그램이 생성되는가?

힙 메모리(malloc/new)를 사용하면 비결정론적 프로그램이 생성되는가? 나는 몇 달 전부터 C에서 우주 애플리케이션용 실시간 시스템용 소프트웨어와 C++를 탑재한 마이크로컨트롤러용 소프트웨어를 개발하기 시작했다.이러한 시스템에는 프로그램을 결정적이지 않게 만들기 때문에 힙 오브젝트(그래서 malloc/new가 없음)를 절대 생성해서는 안 되는 경험칙이 있다.나는 사람들이 나에게 그것을 말할 때 이 진술의 정확성을 확인할 수 없었다.그렇다면, 이것은 올바른 진술인가? 나에게 혼란은 내가 아는 한, 결정론은 프로그램을 두 번 실행하면 정확하고 동일한 실행 경로로 이어진다는 것을 의미한다.내가 이해한 바로는 이것은 다중 스레드 시스템의 문제인데, 동일한 프로그램을 여러 번 실행하면 매번 다른 순서로 실행..

programing 2022.05.13

C 빈 구조체 - 이것은 무엇을 의미하나?

C 빈 구조체 - 이것은 무엇을 의미하나? 나는 이 코드를 내가 사용해야 하는 장치의 헤더 파일에서 찾았고, 비록 몇 년 동안 C를 해왔지만, 나는 결코 이런 일에 부딪힌 적이 없다. struct device { }; struct spi_device { struct device dev; }; 다음에서와 같이 사용됨: int spi_write_then_read(struct spi_device *spi, const unsigned char *txbuf, unsigned n_tx, unsigned char *rxbuf, unsigned n_rx); 다음 항목도 참조하십시오. struct spi_device *spi = phy->spi; 동일한 것으로 정의되는 경우. 나는 이 정의의 요점이 무엇인지 잘 모르겠다..

programing 2022.05.13

변수에 레이블 주소를 저장하고 goto를 사용하여 해당 주소로 이동할 수 있는가?

변수에 레이블 주소를 저장하고 goto를 사용하여 해당 주소로 이동할 수 있는가? 다들 고토 싫어하는 거 알아.내 코드에서, 내가 생각해 왔고 편안한 이유로, 그들은 효과적인 해결책을 제공한다. (즉, 나는 "그러지 마"를 답으로 찾는 것이 아니라, 나는 당신의 예약을 이해하고, 내가 그것들을 왜 사용하는지 이해한다.) 지금까지는 환상적이었지만, 나는 라벨에 포인터를 저장한 후 나중에 그들에게 갈 수 있는 그런 방식으로 기능성을 확장하고 싶다. 만약 이 코드가 작동한다면, 그것은 내가 필요로 하는 기능성의 유형을 나타낼 것이다.하지만 효과가 없고, 30분 동안 구글을 검색해도 아무것도 드러나지 않았다.누구 아이디어 있는 사람? int main (void) { int i=1; void* the_label_..

programing 2022.05.13

C에서 "참조" 및 "회의"의 의미

C에서 "참조" 및 "회의"의 의미 나는 인터넷에서 다른 것들을 읽었고, 혼란스러웠다. 왜냐하면 모든 웹사이트는 다른 것들을 말하기 때문이다. 나는 에 대해 읽었다.*참조 연산자 및&참조란 변수를 가리키는 포인터를 만들고 포인터가 가리키는 변수의 값에 액세스하는 것을 의미한다.그래서 나는 혼란스러웠다. "참조 및 비참조"에 대한 간단하지만 철저한 설명을 들을 수 있는가?참조란 포인터 변수를 설정하기 위해 기존 변수의 주소를 가져오는 것을 의미한다.유효성을 위해 포인터는 별표가 없는 포인터와 같은 유형의 변수의 주소로 설정되어야 한다. int c1; int* p1; c1 = 5; p1 = &c1; //p1 references c1 포인터 비참조는 * 연산자(아스터스크 문자)를 사용하여 포인터가 가리키는 메..

programing 2022.05.13

왜 C는 2진법을 가지고 있지 않은가?

왜 C는 2진법을 가지고 있지 않은가? 나는 종종 c:에서 이런 것을 할 수 있기를 바란다. val1 &= 0b00001111; //clear high nibble val2 |= 0b01000000; //set bit 7 val3 &= ~0b00010000; //clear bit 5 이런 구문을 갖는 것은 내가 생각할 수 있는 단점이 없는 C에 믿을 수 없을 정도로 유용한 덧셈인 것 같고, 사소한 말다툼이 꽤 흔한 저급한 언어에 있어서는 당연한 일인 것 같다. 편집: 나는 다른 훌륭한 대안들을 보고 있지만 더 복잡한 마스크가 있을 때 그것들은 모두 무너진다.예를 들어, 다음과 같다.reg마이크로컨트롤러의 I/O 핀을 제어하는 레지스터인데, 핀 2, 3, 7을 동시에 높게 설정하고 싶다.reg = 0x46..

programing 2022.05.13

힙에 대한 메모리 할당이 스택에 비해 훨씬 느린 이유는?

힙에 대한 메모리 할당이 스택에 비해 훨씬 느린 이유는? 나는 이런 말을 여러 번 들었다.하지만 왜 그런지...힙에서 메모리를 할당할 때 추가 비용이 발생하는가?하드웨어 관련인가?CPU 사이클과 관련이 있는가?많은 추측이 있지만 정확한 답은 없다...누가 좀 자세히 설명해 주시겠습니까? "unwind"가 말했듯이, 힙 데이터 구조는 스택보다 더 복잡하다.그리고 내 생각에, 일부 메모리 공간은 스레드가 실행되기 시작할 때 스택으로 스레드에 할당되는 반면, 힙은 프로세스 내의 모든 스레드에 의해 공유된다.이 패러다임은 가비지 컬렉션과 같이 각 스레드의 공유 힙 사용을 관리하기 위한 몇 가지 추가적인 메커니즘이 필요하다.내 말이 맞나?왜냐하면 힙은 스택보다 훨씬 더 복잡한 데이터 구조이기 때문이다. 많은 아키..

programing 2022.05.12

부동 소수점 값의 정밀도를 유지하기 위한 폭 지정자 인쇄

부동 소수점 값의 정밀도를 유지하기 위한 폭 지정자 인쇄 a가 있는가printf문자열을 다시 스캔할 때 원래 부동소수 값을 획득할 수 있도록 필요한 수의 유의한 숫자로 출력을 자동 포맷할 수 있는 부동소수 지정자에 적용할 수 있는 폭 지정기 예를 들어, a를 인쇄한다고 가정합시다.float2소수 자릿수: float foobar = 0.9375; printf("%.2f", foobar); // prints out 0.94 출력을 스캔할 때0.94수 .0.9375부동 소수점 값 되돌리기(이 예에서는 아마도 안 그럴 것이다). 나는 말할 수 있는 방법을 원한다.printf부동 소수점 값을 필요한 숫자의 중요한 숫자로 자동 인쇄하여 전달된 원래 값으로 다시 스캔할 수 있도록 함printf. 매크로가 좀 있어야겠..

programing 2022.05.12

"char s[static 10]"와 같은 함수의 배열 매개변수에서 정적 키워드의 목적은?

"char s[static 10]"와 같은 함수의 배열 매개변수에서 정적 키워드의 목적은? 몇 가지 소스 코드를 검색하다가 다음과 같은 기능을 발견하게 되었다. void someFunction(char someArray[static 100]) { // do something cool here } 일부 실험에서는 다음과 같은 다른 한정자가 나타날 수 있다. void someFunction(char someArray[const]) { // do something cool here } 예선은 단지 내부에서만 허용되고 있는 것으로 보인다.[ ]배열을 함수의 매개 변수로 선언할 때이게 뭘 하는 거지?함수 매개 변수에 대해 왜 다른가?첫 번째 선언은 컴파일러에게 다음과 같이 말한다.someArray최소 100개의 ..

programing 2022.05.12
반응형