반응형

C 23

C에서 캐스팅이 정수로 두 배 증가할 때 오버플로 처리

C에서 캐스팅이 정수로 두 배 증가할 때 오버플로 처리 오늘 저는 가능한 최대 정수보다 큰 두 배를 정수에 캐스팅하면 -2147483648이 나오는 것을 발견했습니다.마찬가지로 가능한 최소 정수보다 작은 두 배를 캐스팅하면 -2147483648도 나옵니다. 이 동작은 모든 플랫폼에 대해 정의되어 있습니까? 이 언더플로우/오버플로우를 감지하는 가장 좋은 방법은 무엇입니까? 것이 해결책입니까?과 maxint한을자에는이까장은에?까은장이s한f?eg는neser캐스팅이 정수로 플로팅되면 오버플로로 인해 정의되지 않은 동작이 발생합니다.C99 규격, 섹션 6.3.1.4 실제 부동 및 정수: 한 값을 의 과 으로 하는 이외의 _Bool). , 이 됩니다 (, 이 0 으로).정수형으로 적분 부분의 값을 나타낼 수 없으면..

programing 2023.09.14

헤더 파일은 전체 프로그램에서 한 번만 포함됩니까?

헤더 파일은 전체 프로그램에서 한 번만 포함됩니까? 나는 이것이 흔한 질문이라는 것을 알지만 나는 아직도 그것을 완전히 이해할 수 없습니다. 여러 개의 다른 소스 및 헤더 파일에서 생성된 C 또는 C++ 프로그램에서 각 헤더 파일은 헤더 가드를 사용할 때 전체 코드에 한 번만 포함됩니까? 이전에 누군가가 헤더 파일(가드 포함)이 하나의 번역 단위에 한 번만 포함되지만 전체 코드에는 여러 번 포함된다고 말했습니다.이게 사실입니까? 전체 코드를 통해 한 번만 포함될 경우, 한 파일이 포함을 희망하고 전처리기에서 이미 포함된 것을 감지했을 때, 사용을 희망하는 파일이 이전에 포함된 코드의 위치를 어떻게 알 수 있습니까?이 프로세스는 다음과 같습니다. source header source header heade..

programing 2023.09.09

C에서 익명의 구조물은 어떻게 반납해야 합니까?

C에서 익명의 구조물은 어떻게 반납해야 합니까? 몇 가지 코드를 시도해 보니 다음 코드가 컴파일되어 있습니다. struct { int x, y; } foo(void) { } 익명을 반환하는 함수를 정의하는 것 같습니다. 내 컴파일러로 컴파일하는 경우에만 발생합니까, 아니면 합법적인 C(99)입니까? 그렇다면 반환 문에 대한 올바른 구문은 무엇이며 반환된 값을 변수에 올바르게 할당하려면 어떻게 해야 합니까?돌아가실 구조물은 익명의 구조물이 아닙니다.C 표준은 익명 구조를 태그를 사용하지 않는 다른 구조의 멤버로 정의합니다.반품하시는 건 태그가 없는 구조인데 회원이 아니기 때문에 익명은 아닙니다.GCC는 태그가 없는 구조를 나타내기 위해 라는 이름을 사용합니다. 함수에 동일한 구조를 선언하려고 한다고 가정해..

programing 2023.09.09

이미지 처리를 위한 매우 빠른 Memcpy?

이미지 처리를 위한 매우 빠른 Memcpy? 저는 C에서 메모리 주변의 큰 데이터 덩어리를 복사해야 하는 이미지 처리를 하고 있습니다. 소스와 대상이 겹치지 않습니다. GCC를 사용하는 x86 플랫폼에서 이를 수행하는 가장 빠른 방법은 무엇입니까(SSE, SSE2는 사용할 수 있지만 SSE3는 사용할 수 없음)? 솔루션이 조립식이거나 GCC 내장형을 사용할 것으로 예상됩니다. 다음 링크를 찾았지만 이 링크가 가장 좋은 방법인지 알 수 없습니다(작성자도 버그가 몇 가지 있다고 말합니다).http://coding.derkeiler.com/Archive/Assembler/comp.lang.asm.x86/2006-02/msg00123.html 편집: 복사본이 필요합니다. 데이터를 복사해야 하는 번거로움을 피할 ..

programing 2023.08.30

C 언어에서 #line의 의미는 무엇입니까?

C 언어에서 #line의 의미는 무엇입니까? 무슨 뜻입니까?#lineC 언어로?그것은 어디에 사용됩니까?이것은 컴파일러에게 다음 줄이 실제로 어디에서 왔는지 알려줍니다.예를 들어 파일을 포함할 때 컴파일러(기본적으로 하나의 데이터 스트림만 보고 있음)에게 다른 파일을 보고 있음을 알려주는 것은 일반적으로 C 사전 처리기뿐입니다. 이것은 이상하게 들릴 수도 있지만, 프리프로세서는 단순히 당신이 포함을 지정하는 곳에 헤더 파일을 삽입하고 컴파일러는 전체(당신의 소스 코드와 연결된 모든 헤더 파일)에서 작동합니다. 만약 gcc를 사용한다면 당신은 프리프로세서 단계의 결과를 확인할 수 있습니다.gcc -E myfile.c거기서 당신은 그것이 추가하는 것을 알아차릴 것입니다.#line명령어는 파일을 포함할 때마다..

programing 2023.08.25

JNIEnv 환경에 대한 글로벌 참조 유지

JNIEnv 환경에 대한 글로벌 참조 유지 나는 저장하고 있습니다.JNIEnv나중에 정적 Java 메서드를 호출할 수 있도록 글로벌에서.하지만 글로벌 포인터를 저장할 필요가 있습니까?JNIEnv다른 자바 객체와 같은 방식으로, 또는 이것을 필요로 하지 않는 특별한 경우입니다. JNIEnv* globalEnvPointer; [JNICALL etc] void init(JNIENv* env, [etc]) { //required? globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env); //or is this OK? globalEnvPointer = env; } 편집 나는 여기서 약간 멍청하다, 사용할 모든 방법들.globalEnvPointer내가 내 안에서 ..

programing 2023.08.20

"&(s->var)" vs "&s->var"에서처럼 구조체 포인터에서 구조체 멤버의 주소를 가져오려면 괄호가 필요합니까?

"&(s->var)" vs "&s->var"에서처럼 구조체 포인터에서 구조체 멤버의 주소를 가져오려면 괄호가 필요합니까? 나는 있습니다struct str *s; 허락하다var변수가 되다s아이즈&s->var와 동등한.&(s->var)?예, 예, 구성원 액세스 연산자가 연산자의 주소보다 우선 순위가 높기 때문에 동일합니다. 가독성 측면에서, 두 번째 것.&(s->var)보다 훨씬 가독성이 높습니다.&s->var그리고 첫 번째 형태보다 선호되어야 합니다.두 번째 양식을 사용하면,&(s->var)괄호 안의 표현식이 항상 먼저 평가된다는 것을 알기 때문에 실제로 무엇을 하고 있는지 다시 계산할 필요가 없습니다.의심스러운 경우 괄호를 사용합니다.네. (->)가 &보다 우선 순위가 높습니다.http://cpprefe..

programing 2023.08.15

정적 Mac OS XC 빌드 생성

정적 Mac OS XC 빌드 생성 Mac OS X에서 .c 파일의 정적 빌드를 만들려면 어떻게 해야 합니까? gcc -o test Main.c -static 이해합니다. ld: library not found for -lcrt0.o collect2: ld returned 1 exit status Mac OS X의 gcc에서는 지원되지 않습니다. http://discussions.apple.com/message.jspa?messageID=11053384 아마도 "-정적" 플래그 플랫아웃은 MacOS X에서 작동하지 않을 것입니다. gcc의 모든 기능이 MacOS X에서 구현되는 것은 아닙니다. Apple은 향후 버전의 OS에서도 gcc를 사용하지 않을 것입니다. "-static"을 사용하여 연결하는 방법을..

programing 2023.08.10

한 기능에서 선언된 연합 유형을 다른 기능에서 사용하는 것이 잘못된 이유는 무엇입니까?

한 기능에서 선언된 연합 유형을 다른 기능에서 사용하는 것이 잘못된 이유는 무엇입니까? ISO/IEC 9899:1999(6.5.2.3 참조)를 읽었을 때 다음과 같은 예를 보았습니다(광산 강조). 다음은 유효한 조각이 아닙니다(함수 내에서 유니언 유형이 표시되지 않기 때문입니다). struct t1 { int m; }; struct t2 { int m; }; int f(struct t1 * p1, struct t2 * p2) { if (p1->m m = -p2->m; return p1->m; } int g() { union { struct t1 s1; struct t2 s2; } u; /* ... */ return f(&u.s1, &u.s2); } 테스트를 해보니 오류와 경고가 없었습니다..

programing 2023.08.10

C에서 문자열을 클립보드에 복사하는 방법은 무엇입니까?

C에서 문자열을 클립보드에 복사하는 방법은 무엇입니까? 그SetClipboardData기능이 필요합니다.HANDLE참조; 함수에 사용할 문자열을 변환하는 데 문제가 있습니다. 내 코드는 다음과 같습니다. char* output = "Test"; HLOCAL hMem = LocalAlloc( LHND,1024); char* cptr = (char*) LocalLock(hMem); memcpy( cptr, output, 500 ); SetClipboardData(CF_TEXT, hMem); LocalUnlock( hMem ); LocalFree( hMem ); CloseClipboard(); 제가 여기서 무엇을 잘못하고 있으며, 그것을 하는 적절한 방법은 무엇입니까? 감사해요.SetClipboardData ..

programing 2023.08.10
반응형