반응형

c 26

GCC가 C99에서 건설 구조물의 필드를 수정하는 것에 대해 경고할 수 있습니까?

GCC가 C99에서 건설 구조물의 필드를 수정하는 것에 대해 경고할 수 있습니까? 코드를 수정하려고 하다가 작은 문제를 발견했습니다. 저는 컴파일러에게 "구조를 수정하고 있는지 알려주세요, 왜냐하면 저는 정말 그렇게 하고 싶지 않기 때문입니다."라고 말하기 위해 구조에 포인터를 가져다 주는 함수를 작성하고 싶었습니다. 컴파일러가 이 작업을 허용할 것이라는 생각이 갑자기 들었습니다. struct A { char *ptrChar; }; void f(const struct A *ptrA) { ptrA->ptrChar[0] = 'A'; // NOT DESIRED!! } 이는 이해할 수 있습니다. 왜냐하면 실제로 일정한 것은 포인터 자체이지 가리키는 유형이 아니기 때문입니다.가능하다면 컴파일러가 내가 하고 싶지 ..

programing 2023.10.31

C에서 자체 수정 코드를 작성하는 방법은?

C에서 자체 수정 코드를 작성하는 방법은? 변화가 미미하더라도 계속 변화하는 코드를 쓰고 싶습니다. 예를 들어, 아마도 어떤 것이 for i in 1 to 100, do begin x := 200 for j in 200 downto 1, do begin do something end end 첫 번째 반복 후에 코드가 라인을 변경해야 한다고 가정합니다.x := 200다른 방면으로x := 199다음 반복 후에 다음으로 변경합니다.x := 198등등. 그런 코드를 쓰는 것이 가능합니까?그것을 위해서 인라인 어셈블리를 사용해야 합니까? 편집 : C에서 하고 싶은 이유는 다음과 같습니다. 이 프로그램은 실험적인 운영 체제에서 실행될 예정인데, 다른 언어로 컴파일된 프로그램을 사용할 줄 모릅니다.이러한 코드가 필요..

programing 2023.10.26

QtCreator CMake 프로젝트 - 모든 프로젝트 파일을 표시하는 방법

QtCreator CMake 프로젝트 - 모든 프로젝트 파일을 표시하는 방법 저는 QtCreator를 사용하여 CMake 프로젝트를 엽니다.CMakeLists 이외의 일부 디렉토리.txt에는 해당 디렉토리에 대한 헤더 파일 *.hand만 포함되어 있습니다. 프로젝트 트리 보기의 QtCreator에는 CMakeLists만 표시됩니다.txt. 어떻게 고치죠?QtCreator의 모든 프로젝트 파일을 봐야 합니다.예를 들어 프로젝트 편집기 설정이 적용되지 않으므로 프로젝트를 파일 시스템으로 보는 것은 전혀 해결책이 아닙니다.그리고 실행 가능한 대상에 헤더를 추가하는 것을 좋아하지 않습니다. 왜냐하면 헤더는 실제로 거기에 속하지 않기 때문입니다.프로젝트 파일을 하나의 특정 IDE로 잘 작동하도록 사실상 무력화 시..

programing 2023.10.11

문자열 종료를 무효

문자열 종료를 무효 gcc 4.4.4 c89 문자열을 null로 종료하는 표준 방법은 무엇입니까?사용할 때.NULL경고 메시지가 왔습니다. *dest++ = 0; *dest++ = '\0'; *dest++ = NULL; /* Warning: Assignment takes integer from pointer without a cast */ 소스 코드: size_t s_strscpy(char *dest, const char *src, const size_t len) { /* Copy the contents from src to dest */ size_t i = 0; for(i = 0; i < len; i++) *dest++ = *src++; /* Null terminate dest */ *dest++ = ..

programing 2023.10.11

발신자 기능의 이름은 어떻게 알 수 있습니까?

발신자 기능의 이름은 어떻게 알 수 있습니까? C 로__FUNCTION__현재 함수의 이름을 가져오는 데 사용할 수 있습니다.그러나 a()라는 이름의 함수를 정의하면 다음과 같이 b()로 불립니다. b() { a(); } 이제, 소스 코드에는 a()를 호출하는 b()와 같은 많은 함수가 있습니다. 예를 들어 c(), d(), e()... a() 내에서 a()를 호출한 함수의 이름을 탐지하기 위한 코드를 추가할 수 있습니까? 추가: 오해의 소지가 있는 오타를 죄송합니다.수정했습니다. 디버깅을 위해 어떤 함수가 a()를 호출하는지 알아보려고 합니다.나는 당신이 같은 상황일 때 어떻게 하는지 모릅니다? 그리고 제 코드는 vxWorks 아래에 있지만 C99와 관련된 것인지 아니면 다른 것인지 잘 모르겠습니다. ..

programing 2023.10.06

사전 증분 연산자가 r값을 C로 제공하는 이유는 무엇입니까?

사전 증분 연산자가 r값을 C로 제공하는 이유는 무엇입니까? C++에서 사전 증분 연산자는 복사본이 아니라 증분 개체 자체가 반환되기 때문에 l 값을 제공합니다.하지만 C에서는 r값을 줍니다. 왜죠?C는 레퍼런스가 없습니다.인 C++++i참조를 반환합니다.i(lvalue)인 반면 C에서는 복사본(증분)을 반환합니다. C99 6.5.3.1/2 이전 fix ++ 연산자의 피연산자 값이 증가합니다.결과적으로 증분 후 피연산자의 새 값이 됩니다.식 ++E는 (E+=1)과 같습니다. ‘‘value of an expression’’ rvalue 하지만 역사적인 이유로 "C의 일부가 아닌 참조"가 가능한 이유가 될 수 있다고 생각합니다.C99는 (6.3.2.1절의) 각주에서 다음과 같이 말하고 있습니다. "l valu..

programing 2023.10.06

C와 C++에서 "비어있는 루프"라는 용어는 정확히 무엇을 가리킵니다.

C와 C++에서 "비어있는 루프"라는 용어는 정확히 무엇을 가리킵니다. 이런 일입니까? for(;;) { statements; } 아니면 이것입니까? for(initialisation;condition;updation) { } 저는 다양한 자료를 참고하여 답을 찾고 있습니다.첫 번째 경우(빈 식의 경우)는 무한 루프이고 두 번째 경우(빈 식의 본문의 경우)는 빈 루프입니다.제 환경에서는 다음과 같습니다. for(;;) { statements; } 끝없는 고리 for(initialisation;condition;updation) { } 빈 고리답변은 상황에 따라 달라집니다. 루프를 위한 빈 공간을 의미한다면, for(;;) { statements; } 그런 것입니다. 비록 잠시 동안의 루프를 통해서도 동일..

programing 2023.10.06

문자 및 ASCII 코드를 C로 인쇄

문자 및 ASCII 코드를 C로 인쇄 차와 그에 상응하는 ASCII 값을 C로 인쇄하려면 어떻게 해야 합니까?이렇게 하면 모든 ASCII 값이 출력됩니다. int main() { int i; i=0; do { printf("%d %c \n",i,i); i++; } while(i> The ASCII of D is 68 표준 입력에서 텍스트 라인을 읽고 라인에 있는 문자와 ASCII 코드를 출력합니다. #include void printChars(void) { unsigned char line[80+1]; int i; // Read a text line if (fgets(line, 80, stdin) == NULL) return; // Print the line chars for (i = 0; line[i]..

programing 2023.09.21

C의 매크로에 괄호가 필요합니다.

C의 매크로에 괄호가 필요합니다. 이 질문에는 이미 다음과 같은 답변이 있습니다. 괄호 안의 C 매크로 및 인수 사용 (2개 답변) 닫힘5년 전에. 매크로의 정의를 사용해 보았습니다.SQR다음 코드로. #define SQR(x) (x*x) int main() { int a, b=3; a = SQR(b+5); // Ideally should be replaced with (3+5*5+3), though not sure. printf("%d\n",a); return 0; } 인쇄합니다.23. 매크로 정의를 다음으로 변경하는 경우SQR(x) ((x)*(x))결과는 예상대로입니다.64. C의 매크로에 대한 호출이 매크로의 정의로 호출을 대체하는 것은 알고 있지만, 아직도 어떻게 계산되었는지 이해할 수 없습니다...

programing 2023.09.16

ERESTARTSYS가 리눅스 드라이버를 작성하는 동안 사용한 것은?

ERESTARTSYS가 리눅스 드라이버를 작성하는 동안 사용한 것은? 리눅스 디바이스 드라이버 작성을 위한 차단 I/O 기능에 대해 배우고 있는데 어떤 용도로 사용되는지 궁금합니다.ERESTARTSYS. 다음을 고려합니다. 전역 변수: wait_queue_head_t my_wait_q_head; int read_avail = 0; device_init(): init_waitqueue_head(&my_wait_q_head); device_read(): printk("I'm inside driver read!\n"); wait_event_interruptible(&my_wait_q_head, read_avail != 0); printk("I'm awaken!\n"); device_write(): read_a..

programing 2023.09.16
반응형