반응형

C 103

비트 연산자와 "엔디안니스"

비트 연산자와 "엔디안니스" 비트 단위 연산에 엔디안성이 문제가 됩니까?논리적입니까, 아니면 전환적입니까? 저는 비트 연산자에 대해 숙제를 하고 있는데, 무슨 말인지 전혀 알 수 없고, 엔디안스에 상당히 집착하고 있는 것 같습니다.즉, 저는 (대부분과 마찬가지로) 작은 엔디언 머신을 사용하고 있습니다만, 이것은 고려할 필요가 있습니까, 아니면 낭비입니까? 혹시 모르니까 C로 할게요.엔디안성은 메모리의 데이터 레이아웃에만 문제가 됩니다.조작 대상 프로세서에 의해 데이터가 로드되는 즉시 엔디안성은 완전히 회복됩니다.이동, 비트 단위 동작 등은 엔디안성에 관계없이 예상대로 수행됩니다(데이터는 논리적으로 하위 비트에서 상위 비트로 배치됨).비트 연산자는 엔디안을 추상화합니다.예를 들어,>>연산자는 항상 비트를 ..

programing 2022.08.14

i = (i, ++i, 1) + 1은 무엇을 합니까?

i = (i, ++i, 1) + 1은 무엇을 합니까? 정의되지 않은 동작과 시퀀스 포인트에 대한 이 답변을 읽은 후 작은 프로그램을 작성했습니다. #include int main(void) { int i = 5; i = (i, ++i, 1) + 1; printf("%d\n", i); return 0; } 출력은2오, 세상에, 감소가 올 줄 몰랐어요!여기서 무슨 일이 일어나고 있는 거야? 또한 위의 코드를 컴파일 할 때 다음과 같은 경고를 받았습니다. px.c:5:8: warning: 쉼표식의 왼쪽 피연산자는 영향을 받지 않습니다. [-Wunused-value] i = (i, ++i, 1) + 1; ^ 왜요? 하지만 아마 첫 번째 질문의 답변으로 자동적으로 대답할 수 있을 거예요.표현 중에(i, ++i, ..

programing 2022.08.14

시각 인쇄 방법: 2009 08 08 10 10 18 : 17 : 54 . 811

시각 인쇄 방법: 2009 08 08 10 10 18 : 17 : 54 . 811 시간을 C로 인쇄하는 가장 좋은 방법은 무엇입니까?2009‐08‐10 18:17:54.811?위의 답변은 질문에 완전히 답하지 않습니다(특히 밀리섹 부품).이에 대한 나의 해결책은 strftime 전에 get of day를 사용하는 것입니다.밀리섹을 "1000"으로 반올림하지 않도록 주의하십시오.이것은 하미드 나자리의 대답에 바탕을 두고 있다. #include #include #include #include int main() { char buffer[26]; int millisec; struct tm* tm_info; struct timeval tv; gettimeofday(&tv, NULL); millisec = lri..

programing 2022.08.14

Go에서 릴리스 버전 바이너리를 구축하는 방법

Go에서 릴리스 버전 바이너리를 구축하는 방법 C에서는 디버깅버전 또는 바이너리 파일(오브젝트 파일 및 실행 파일)의 릴리스 버전을 작성할 수 있습니다.바둑에서 어떻게 해요? Go에서는 디버깅버전이나 릴리즈버전이 있는 것이 일반적이지 않습니다. 디폴트로는go build는 기호 및 디버그 정보를 이진 파일과 결합합니다.그러나 기호 및 디버깅 정보를 제거할 수 있습니다.go build -ldflags "-s -w".를 사용하여 링커에게 디버깅 기호를 제거하도록 지시할 수 있습니다. go install -ldflags '-s' 조금 전에 꽤 큰 실행 파일(GXUI 샘플 중 하나)로 시험해 봤더니 1600만 개에서 1000만 개로 줄었습니다.항상 그렇듯이 주행거리가 다를 수 있습니다. 다음은 모든 링커옵션의 전..

programing 2022.08.14

C 문자열에서 공백 제거

C 문자열에서 공백 제거 C 문자열에서 공백을 제거하는 가장 쉽고 효율적인 방법은 무엇입니까?가장 쉽고 효율이 뛰어난 제품은 일반적으로 함께 사용할 수 없습니다. 다음은 인플레이스 제거에 사용할 수 있는 솔루션입니다. void remove_spaces(char* s) { char* d = s; do { while (*d == ' ') { ++d; } } while (*s++ = *d++); } 게시된 답변에서 알 수 있듯이, 이것은 의외로 간단한 작업이 아닙니다.이런 작업에 직면했을 때, 많은 프로그래머들은 그들이 생각해낼 수 있는 가장 모호한 조각을 만들기 위해 상식을 버리기를 선택하는 것 같습니다. 고려해야 할 사항: 공백이 제거된 상태로 문자열 복사본을 만듭니다.전달된 문자열을 수정하는 것은 잘못된..

programing 2022.08.14

C의 정적 아사트

C의 정적 아사트 C(C++가 아님)에서 특히 GCC에 중점을 두고 컴파일 타임 스태틱어사스토를 실현하는 최선의 방법은 무엇입니까?에는 C11이 되어 있습니다._Static_assert키워드를 지정합니다. 이는 gcc-4.6부터 구현되었습니다. _Static_assert (0, "assert1"); /* { dg-error "static assertion failed: \"assert1\"" } */ 첫 번째 슬롯은 정수 표현식이어야 합니다.긴 입니다._Static_assert(0, L"assertion of doom!")를 참조해 주세요. 이 기능은 최신 버전의 clang에도 구현되어 있습니다.이는 기능 및 비기능 범위(구조, 유니온 내부가 아님)에서 작동합니다. #define STATIC_ASSERT..

programing 2022.08.14

C와 C++ 컴파일 비호환성 - 유형 이름 지정 안 함

C와 C++ 컴파일 비호환성 - 유형 이름 지정 안 함 공급업체의 라이브러리를 C++ 어플리케이션과 조합하여 사용하려고 합니다.라이브러리는 주로 C에 기반을 두고 있으며, 이는 일반적으로 C에 문제가 되지 않습니다.extern "C"C++ 컴파일러가 받아들이지 않는 문제가 발생했습니다. 코드를 다음의 샘플 파일로 간략화했습니다.header.h는 서플라이어 라이브러리의 헤더를 나타내고 main.c/cpp는 나만의 파일입니다.저의 진짜 어플리케이션은 C++ 어플리케이션이기 때문에 main.cpp에서 동작시키고 싶습니다. header.h (행 참조)u64 u64;): #ifndef HEADER_H #define HEADER_H #include typedef uint64_t u64; union teststruc..

programing 2022.08.13

strdup 또는 _strdup?

strdup 또는 _strdup? 사용할 때strdupMicrosoft Visual C++ 에서는, 다음의 경고가 표시됩니다. 경고 C4996: 'strdup':이 항목의 POSIX 이름은 더 이상 사용되지 않습니다.대신 ISO C++ 준거명 _strdup을 사용합니다.자세한 내용은 온라인 도움말을 참조하십시오. 그런 것 같다_strdup정답입니다. 하지만 사용할 때는_strdupGCC(Fedora Linux OS)에서 컴파일러에 다음 오류가 표시됩니다. 오류: '_strdup'이 이 범위에서 선언되지 않았습니다. GCC 및 Linux에서는 컴파일러에 다음 오류가 표시되지 않습니다.strdup. 어느 쪽이 맞습니까?strdup또는_strdup? 주의: 다음을 포함합니다.내 코드로. 어떤 것이 올바른가요?..

programing 2022.08.13

C의 main() 함수에 유효한 시그니처는 무엇입니까?

C의 main() 함수에 유효한 시그니처는 무엇입니까? C의 주요 기능에 유효한 시그니처는 무엇입니까?알고 있습니다. int main(int argc, char *argv[]) 다른 유효한 것이 있습니까?C11standard에서는 다음 두 가지를 명시적으로 언급하고 있습니다. int main(void); int main(int argc, char* argv[]); 단, 다음 각주와 함께 "또는 동등한" 문구를 언급하고 있습니다. thus따는int로 할 수 typedef""로 "int 「」의 .argv라고 쓸 수 char ** argv기타 등등. 또한 더 많은 (실장 정의) 가능성도 제공합니다. 텍스트(섹션)5.1.2.2.1, 이 은 " ", "에서 되지 않습니다C99 에러: 시은 "예"입니다.main구현..

programing 2022.08.13

Ubuntu에서 libcrypto를 찾을 수 없습니다.

Ubuntu에서 libcrypto를 찾을 수 없습니다. makefile이 있는 프로그램을 한번 해보고 싶은데, 언제?make셸의 오류는 다음과 같습니다. g++ -g -DaUNIX -I../../acroname/aInclude -I../../acroname/aSource -Wl,-rpath,. unix_aLaserDemo_Data/aLaserDemo.o unix_aLaserDemo_Data/acpLaser.o -lpthread -lcrypto -lssl -o ../../acroname/aBinary/aLaserDemo /usr/bin/ld: cannot find -lcrypto collect2: ld returned 1 exit status make file은 다음과 같습니다. CC = g++ CFLAG..

programing 2022.08.12
반응형