반응형

C 31

'RTLD_NEXT' 미신고

'RTLD_NEXT' 미신고 C 프로그램을 컴파일하려고 하는데 'RTLD_NEXT'라는 오류가 선언되지 않았습니다.이것은 c 프로그램이 포함된 dlfcn.h에 정의되어야 할 것 같은데, 내가 dlfcn.h 내부를 살펴보니 RTLD_NEXT가 없습니다. 이거 어떻게 고쳐요?여기서 문제가 되는 것은RTLD_NEXTposix 표준에 의해 정의되지 않습니다. 그래서 GNU 사람들은 당신이 아니면 그것을 활성화하지 않습니다.#define _GNU_SOURCE아니면-D_GNU_SOURCE. POSIX의 다른 관련 부품으로는 dlfcn.h와 dlsym.h가 있습니다.흥미롭게도, 나중에 언급되는 것들은RTLD_NEXT. GNU 사람들은 확장이 무엇이고 무엇이 아닌지에 대해 약간 혼란스러워 합니다.에 따르면man dls..

programing 2023.11.04

C switch 문보다 크고 작음

C switch 문보다 크고 작음 비교가 많이 되는 코드를 작성하려고 합니다. "QUANT"에 프로그램을 작성합니다.숫자를 "수치화"하는 "C".정수 "x"를 읽고 테스트하면 다음과 같은 출력이 나옵니다. x 1000 인쇄 이상 "hugely 양성" x 999부터 100까지(100 포함) "매우 긍정적" 인쇄 100에서 0 사이의 x "양" 인쇄 x 정확히 0 인쇄 "0" 0 ~ -100 사이의 x "음" 인쇄 x -100 ~ -999(-100 포함) 인쇄 "매우 음" x -1000 인쇄 이하 "hugely 네거티브" 따라서 -10은 "네거티브", -100은 "매우 네거티브", 458은 "매우 포지티브"로 출력됩니다. 그리고 스위치 문을 사용해서 해결하려고 했지만, 작동이 되지 않았습니다.그것을 사용해서..

programing 2023.11.04

memcmp가 루프 체크보다 훨씬 빠른 이유는 무엇입니까?

memcmp가 루프 체크보다 훨씬 빠른 이유는 무엇입니까? 왜가.memcmp(a, b, size)다음보다 훨씬 더 빠릅니다. for(i = 0; i < nelements; i++) { if a[i] != b[i] return 0; } return 1; memcmp는 CPU 명령 같은 것입니까?꽤나 깊은가봐요 왜냐면 제가 사용하는 속도가 엄청나게 빨라졌거든요memcmp순환으로memcmp어셈블리에서 구현되는 경우가 많은데, 이는 C의 단순한 루프보다 훨씬 빠른 아키텍처 고유의 여러 기능을 활용할 수 있습니다. "빌트인"으로서 GCC 지원memcmp(또한 1톤의 다른 기능도 포함) 내장된 기능입니다.GCC의 일부 버전/구성에서 다음에 대한 호출memcmp로 인정될 것입니다.__builtin_memcmp. 방출..

programing 2023.11.04

1103515245가 란드에서 사용되는 이유는 무엇입니까?

1103515245가 란드에서 사용되는 이유는 무엇입니까? 이 놀랍도록 간단한 구현을 말씀드리는 겁니다.rand() C준: static unsigned long int next = 1; int rand(void) /* RAND_MAX assumed to be 32767. */ { next = next * 1103515245 + 12345; return (unsigned)(next/65536) % 32768; } 이 위키피디아 기사를 통해 우리는 승수가a(위 코드에서)a = 1103515245)는 다음 두 가지 조건만 충족해야 합니다. a - 1의 모든 주요 인자에 의해 나뉠 수 있습니다.m. (저희의 경우는m = 2^32 int 의, .m단 하나의 소인수 = 2)를 갖습니다. a - 1만약에 4의 배수입..

programing 2023.10.30

x86_64의 명령어가 syscall입니까?

x86_64의 명령어가 syscall입니까? glibc에서 시스템 호출을 수행하는 코드를 확인하고 싶었습니다.이런 걸 찾았어요 ENTRY (syscall) movq %rdi, %rax /* Syscall number -> rax. */ movq %rsi, %rdi /* shift arg1 - arg5. */ movq %rdx, %rsi movq %rcx, %rdx movq %r8, %r10 movq %r9, %r8 movq 8(%rsp),%r9 /* arg6 is on the stack. */ syscall /* Do the system call. */ cmpq $-4095, %rax /* Check %rax for error. */ jae SYSCALL_ERROR_LABEL /* Jump to erro..

programing 2023.10.30

3d 가속도계가 방향을 계산합니다.

3d 가속도계가 방향을 계산합니다. 3축에 대한 가속도계 값이 있습니다(보통 중력만 -1.0에서 1.0 사이의 데이터를 포함하는 경우). float Rx; float Ry; float Rz; 몇 가지 계산을 해보고 각 축에 대한 각도를 알아봅니다. float R = sqrt(pow(Rx,2)+pow(Ry,2)+pow(Rz,2)); float Arx = acos(Rx/R)*180/M_PI; float Ary = acos(Ry/R)*180/M_PI; float Arz = acos(Rz/R)*180/M_PI; 그런 다음 박스 각도 값을 opengl로 설정합니다. rquad = Arx; yquad = Ary; 내 상자를 회전시키는 방법: glRotatef(yquad,1.0f,0.0f,0.0f); glRotate..

programing 2023.10.25

C를 호출하는 기능은 x86 어셈블리 언어에서 나옵니다.

C를 호출하는 기능은 x86 어셈블리 언어에서 나옵니다. 조립 언어 프로그램에서 호출할 수 있도록 GCC를 사용하여 C 기능에서 조립 언어 기능을 생성할 수 있습니까?저는 gcc가 C를 기계 코드(어셈블리 언어로 쉽게 분해할 수 있는)로 컴파일한다는 것을 알고 있고, C에서 인라인 어셈블리 언어 기능이 가능하다는 것은 이미 알고 있지만, 어셈블리 언어 프로그램에서 C 기능을 호출하는 방법은 아직 찾지 못했는데, 이는 기본적으로 이와 반대입니다. 여기서는 x86 조립 프로그램에서 C 함수를 인라인화하려고 합니다.인라인이 불가능하다면 어셈블리어 프로그램에서 C 함수를 호출할 수 있는 다른 방법이 있습니까? .686p .model flat,stdcall .stack 2048 .data .code start: ..

programing 2023.10.25

총 열거 항목 수 가져오기

총 열거 항목 수 가져오기 런타임에 열거형으로 정의된 총 항목 수를 얻을 수 있습니까? 이 질문과 거의 동일한 질문이지만, 그 질문은 C#과 관련된 것이고, 제가 알 수 있는 한, 목표-C에서 제공되는 방법은 작동하지 않을 것입니다.안enum는 일반-구-C 타입이므로 동적 런타임 정보를 제공하지 않습니다. 한 가지 대안은 열거의 마지막 요소를 사용하여 카운트를 표시하는 것입니다. typedef enum { Red, Green, Blue, numColors } Color; 전처리기를 사용하면 열거형에 값을 추가하는 성가신 '핵' 없이 이를 달성할 수 있습니다. #define __YourEnums \ YourEnum_one, \ YourEnum_two, \ YourEnum_three, \ YourEnum_f..

programing 2023.10.20

함수 이름을 문자열로 가져옵니다.

함수 이름을 문자열로 가져옵니다. 제가 전화하는 기능의 이름을 표시하고 싶습니다.여기 내 코드가 있습니다. void (*tabFtPtr [nbExo])(); // Array of function pointers int i; for (i = 0; i < nbExo; ++i) { printf ("%d - %s", i, __function__); } 사용했습니다.__function__예를 들어 제가 원하는 것과 꽤 가깝기 때문입니다만, 저는 다음과 같이 가리키는 기능의 이름을 표시하고 싶습니다.tabFtPtr [nbExo]. 도와주셔서 감사합니다 :)당신은 C99 표준 이상을 따르는 C 컴파일러가 필요합니다.다음과 같은 미리 정의된 식별자가 있습니다.__func__당신이 원하는 걸 해주는 거지 void fun..

programing 2023.10.15

C++는 전처리기 기호를 정의하지 않고 디버그 기호로 컴파일하는지 여부를 확인합니다.

C++는 전처리기 기호를 정의하지 않고 디버그 기호로 컴파일하는지 여부를 확인합니다. 저는 이와 같은 것을 사용해 왔습니다. int main(int argc, char *argv[]) { #ifdef DEBUG printf("RUNNING DEBUG BUILD"); #else printf("Running... this is a release build."); #endif ... 그러나 디버그 빌드를 위해 -DEBUG로 컴파일해야 합니다.GCC는 내가 확인할 수 있는 자체 전처리기 매크로를 정의하는 것과 같이 디버그 기호(-g 플래그)로 컴파일할 때를 결정할 수 있는 방법을 제공합니까?대답은 아니오입니다.일반적으로 이러한 매크로(DEBUG, NDEBUG, _DEBUG)는 활성화된 구성(DEBUG/Relea..

programing 2023.10.15
반응형