C 61

플로트 0에서 색상 값을 변환하는 중..1에서 바이트 0까지...255

플로트 0에서 색상 값을 변환하는 중..1에서 바이트 0까지...255 색상 값을 플로트에서 바이트로 변환하는 올바른 방법은 무엇입니까?요.b=f*255.0 해야겠지만,만만1.0다로 됩니다.255,그렇지만0.9999e니다.254아마 내가 원하는 건 아닐 겁니다 인 것 같습니다.b=f*256.0 않는입니다를 는 더 2561.0. 결국 저는 이걸 사용합니다. #define F2B(f) ((f) >= 1.0 ? 255 : (int)((f)*256.0)) 1.0이 유일하게 오류가 발생할 수 있으므로 이 경우를 별도로 처리합니다. b = floor(f >= 1.0 ? 255 : f * 256.0) 또한 반올림 오류로 인한 잘못된 동작(예: f=1.0000001)을 방지하기 위해 f가 실제로 0

programing 2023.09.27

고투 사용을 피하고 중첩 루프를 효율적으로 끊는 방법

고투 사용을 피하고 중첩 루프를 효율적으로 끊는 방법 는 합니다를 하는 것이 싶습니다.gotoC/C++을 하는 . 그러나 다음과 같은 코드를 감안할 때 for (i = 0; i < N; ++i) { for (j = 0; j < N; j++) { for (k = 0; k < N; ++k) { ... if (condition) goto out; ... } } } out: ... 하면 를 하지 않고 을 할 수 .goto내 가 입니다를 하는 것과 을 할 수 입니다.condition를 들어, 루프가 어,에서,나 AFAIK Go는입니다로 합니다.jmp할 수 가장 이것이 제가 생각할 수 있는 가장 효율적인 방법입니다. 그 외에 좋은 관행으로 여겨지는 것이 있습니까?고토를 사용하는 것이 나쁜 관행으로 간주된다고 말하면..

programing 2023.09.27

연산 c=a+++b는 무엇을 의미합니까?

연산 c=a+++b는 무엇을 의미합니까? 다음 코드는 나를 혼란스럽게 합니다. int a=2,b=5,c; c=a+++b; printf("%d,%d,%d",a,b,c); 저는 생산량이 3,5,8일 것으로 예상했는데, 주로 a++가 2 +1을 의미하고 3 +5가 8이기 때문에 3,5,8을 예상했습니다.결과가 3,5,7로 나왔습니다. 왜 이런지 설명해주실 수 있나요?라는 말이 있습니다.c = a++ + b,그리고.a++즉, 값을 취한 후의 증가를 의미합니다.a계산을 해 보다a + b == 2 + 5. 제발, 이런 코드는 절대 쓰지 마.Maximal Munch Rule 은 다음 식에 따라 다음과 같이 구문 분석됩니다. c = a++ + b; 그것은,a는 후 증분됩니다(a++) 및 현재 값입니다.a(사후진단 전)..

programing 2023.09.17

함수에서 반환되는 문자열 리터럴의 수명

함수에서 반환되는 문자열 리터럴의 수명 다음 코드를 고려합니다. const char* someFun() { // ... some stuff return "Some text!!" } int main() { { // Block: A const char* retStr = someFun(); // use retStr } } 함수에서someFun(),는 어디에"Some text!!"저장(ROM의 어떤 정적 영역에 있을 수 있다고 생각합니다) 및 범위 수명은 얼마입니까? 기억이 가리킬까요?retStr프로그램 전체에 걸쳐 점유되거나 블록 A가 빠져나가면 해제됩니까?C++ Standard에서는 문자열 리터럴을 어디에 저장해야 하는지에 대해 언급하지 않습니다.그러나 프로그램의 수명이 프로그램의 수명임을 보장합니다.따라서..

programing 2023.09.17

gcc/usr/bin/ld: 오류: -ln커서를 찾을 수 없습니다.

gcc/usr/bin/ld: 오류: -ln커서를 찾을 수 없습니다. 저는 Ubuntu 12.04를 실행하고 있으며 현재 C, OpenGL, 티포트 및 입력 방법을 포함한 프로젝트를 진행하고 있습니다. 문제는 화살표 키를 입력하기로 결정하면서 시작되었습니다.화살표 키의 키 코드를 확인해 보았는데 화살표가 모두 0을 반환합니다.이걸 어떻게 작동시키는지 찾아봤는데 코니오가 나왔어요유감스럽게도 이것은 리눅스용으로 사용할 수 없는 오래된 DOS 헤더입니다.그리고 ncurses라는 대체자를 찾았습니다. 필요한 라이브러리를 설치한 후 빌드 지침을 자세히 따라 curs.h를 main.c 소스에 #포함시켰습니다.처음에 gcc를 사용하여 컴파일을 시도했을 때 다음과 같은 오류가 발생했습니다. main.o:main.c:fu..

programing 2023.09.17

문자 배열의 리터럴 문자열 이니셜라이저

문자 배열의 리터럴 문자열 이니셜라이저 배열이 포인터로 손상되는 경우에 대한 다음 규칙에서: 식에 나타나는 유형 array-of-T의 l 값 [질문 2.5 참조]은 첫 번째 요소에 대한 포인터(세 가지 예외 포함)로 감쇠합니다. 결과 포인터의 유형은 포인터-to-T입니다. (예외는 배열이 or & 연산자 크기의 피연산자이거나 문자 배열의 문자 문자열 이니셜라이저인 경우입니다.) 배열이 "문자 배열을 위한 문자 문자열 이니셜라이저"일 때 경우를 어떻게 이해합니까?몇 가지 예를 들어 주세요. 감사합니다!배열이 포인터로 붕괴되지 않는 세 가지 예외는 다음과 같습니다. 예외 1. — 배열이 피연산자인 경우sizeof. int main() { int a[10]; printf("%zu", sizeof(a)); /*..

programing 2023.09.17

함수 호출 전에 (공백) 사용

함수 호출 전에 (공백) 사용 이 질문에는 이미 다음과 같은 답변이 있습니다. 닫힘10년 전에. 중복 가능: 사용하지 않은 반환 값을 무효로 만들기 목적이 무엇입니까?(void)예를 들어 함수 호출 전에 (void)func1(); 이건 단순히 전화하는 것과 같은 거라고 생각합니다.func1(); 그러므로.(void)단순히 다른 프로그래머들에게 리턴 타입이 무시될 것이라는 것을 알리기 위해 호출합니다. 예를 들어 만약func1()의 리턴 타입을 가지고 있었습니다.int, 또는 컴파일러가 함수에 대해 몇 가지 최적화를 수행할 수 있습니까?아마도 그 이면에는 합법적인 C++인가 아니면 어떤 레거시 코드에서 볼 수 있는 C의 잔재인가 하는 또 다른 이유가 있을 것입니다. 감사해요.값이 쉼표 연산자의 피연산자이고..

programing 2023.09.12

공극 포인터 역참조

공극 포인터 역참조 Void 포인터를 캐스팅한 후에도 재참조를 하다가 컴파일 오류가 발생합니다.누구든지 이것의 이유를 제게 알려주실 수 있나요? int lVNum = 2; void *lVptr; lVptr = (int*)&lVNum; printf("\nlVptr[60 ] is %d \n",lVptr[1]); 회피 포인터를 삭제하는 것은 말이 안 됩니다.컴파일러는 포인터가 가리키는 메모리를 어떻게 해석합니까?먼저 포인터를 적절한 유형으로 캐스팅해야 합니다. int x = *(int*)lVptr; printf("\nlVptr[60 ] is %d \n", *(int*)lVptr); 이렇게 하면 빈 포인터가 다음의 포인터로 캐스팅됩니다.int정확하게 참조를 취소할 수 있습니다. 만약 당신이 그것을 배열로 취급하..

programing 2023.09.07

엔디안 불가지론자 C/C++ 코드를 작성하는 방법은?

엔디안 불가지론자 C/C++ 코드를 작성하는 방법은? 저는 구글 검색을 좀 해봤는데 이 질문에 대한 좋은 기사를 찾을 수 없었습니다.엔디안 애그노스틱이 되고 싶은 앱을 구현할 때 주의해야 할 사항은 무엇입니까?엔디언에 대해 신경을 써야 하는 유일한 경우는 엔디언에 민감한 이진 데이터(즉, 텍스트가 아님)를 동일한 엔디언을 가지지 않을 수 있는 시스템 간에 전송할 때입니다.일반적인 솔루션은 "네트워크 바이트 순서"(일명 빅 엔디언)를 사용하여 데이터를 전송한 다음 필요한 경우 다른 쪽에서 바이트를 스위즐하는 것입니다. 호스트에서 네트워크 바이트 순서로 변환하려면 다음을 사용합니다.htons(3)그리고.htonl(3)하려면 다시변려면하환, 용사용을 합니다.ntohl(3)그리고.ntohs(3)당신이 알아야 할..

programing 2023.09.02

c99와 c11의 차이

c99와 c11의 차이 닫힘.이 질문은 더 필요합니다.집중적인현재 답변을 수락하고 있지 않습니다. 이 질문을 개선하고 싶으십니까?이 게시물을 편집하여 하나의 문제에만 초점을 맞추도록 질문을 업데이트합니다. 7년 전에 문을 닫았습니다. 이 질문을 개선합니다. 저는 현재 c를 배우고 있습니다.제가 읽은 책은 C99 기반의 책입니다.저는 이 책을 다 읽고 지식을 C11로 업데이트하거나, 큰 차이가 있다면 자원을 변경하고 싶습니다.따라서 제가 요청하는 것은 제 지식을 업데이트하기 위한 설명이나 자료입니다.이 정보원만 찾았어요그럼에도 불구하고 제가 필요로 하는 정보를 포괄하지 않거나 간결하지 않은 것 같습니다. 잘 부탁드립니다.추신: 저는 C11이 현재 보편적인 표준이라고 생각하기 때문에 그것을 배우고 싶습니다...

programing 2023.08.28