반응형

C 78

X-Macros의 실제 사용

X-Macros의 실제 사용 X-Macros를 방금 배웠어요.X-Macros의 실제 용도는 무엇입니까?언제가 그 일에 적합한 도구입니까?몇 년 전에 X-macros를 발견했는데, 그때 코드 안에 함수 포인터를 사용하기 시작했습니다.저는 임베디드 프로그래머로 스테이트 머신을 자주 사용합니다.나는 종종 다음과 같은 코드를 작성하곤 했다. /* declare an enumeration of state codes */ enum{ STATE0, STATE1, STATE2, ... , STATEX, NUM_STATES}; /* declare a table of function pointers */ p_func_t jumptable[NUM_STATES] = {func0, func1, func2, ... , funcX..

itsource 2022.09.23

변수 초기화, 정의, 선언 간의 차이

변수 초기화, 정의, 선언 간의 차이 문제를 읽고 선언과 정의의 차이를 알게 되었습니다.그럼 정의는 선언에 초기화를 더한 것과 같습니까?선언. 선언은 일반적으로 프로그램에 새로운 이름을 도입하는 것을 말한다.예를 들어, 새로운 함수의 「signature」를 기술하는 것으로써, 새로운 함수를 선언할 수 있습니다. void xyz(); 또는 불완전한 유형을 선언합니다. class klass; struct ztruct; 마지막으로 오브젝트를 선언합니다. int x; C++ 표준에서는 § 3.1/1로 다음과 같이 기술되어 있습니다. 선언문(Clause 7)은 하나 이상의 이름을 번역단위에 도입하거나 이전 선언문에 의해 도입된 이름을 다시 작성할 수 있다. 정의. 정의는 이전에 선언된 이름의 정의입니다(또는 정의..

itsource 2022.09.21

구조물의 특별한 점은 무엇입니까?

구조물의 특별한 점은 무엇입니까? C에서는 함수에서 어레이를 반환할 수 없지만 어레이로의 포인터는 반환할 수 있습니다.하지만 나는 무엇이 특별한지 알고 싶다.structs어레이가 포함되어 있어도 기능별로 반환할 수 있습니다. 왜?struct래핑은 다음 프로그램을 유효하게 합니까? #include struct data { char buf[256]; }; struct data Foo(const char *buf); int main(void) { struct data obj; obj = Foo("This is a sentence."); printf("%s\n", obj.buf); return 0; } struct data Foo(const char *buf) { struct data X; strcpy(X.bu..

itsource 2022.09.14

릴리스 모드에서 코드 동작이 예상과 다르다.

릴리스 모드에서 코드 동작이 예상과 다르다. 다음 코드는 디버깅모드 및 릴리스 모드(Visual Studio 2008 사용)에서 다른 결과를 생성합니다. int _tmain(int argc, _TCHAR* argv[]) { for( int i = 0; i 255 ) { result = 255; } printf("i:%2d, result = %3d\n", i, result) ; } return 0; } 디버깅 모드의 출력은 예상대로입니다. i: 0, result = 0 i: 1, result = 16 (...) i:14, result = 224 i:15, result = 240 i:16, result = 255 릴리스 모..

itsource 2022.09.06

64비트 정수를 16진수로 인쇄하는 방법

64비트 정수를 16진수로 인쇄하는 방법 이 질문에는 이미 답변이 있습니다. C에서 int64_t 타입을 인쇄하는 방법 (6개의 답변) 닫힘6년 전에요. 다음 코드로 나는 a의 값을 출력하려고 한다.unit64_t변수 사용printf(). gcc를 사용하여 코드를 컴파일하면 다음 경고가 반환됩니다. 경고: 형식 '%x'은(는) '연결된 int' 형식의 인수를 예상하지만, 인수 2의 형식은 'uint64_t' [-Wformat=]입니다. 코드: #include #include int main () { uint64_t val = 0x1234567890abcdef; printf("val = 0x%x\n", val); return 0; } 출력: val = 0x90abcdef 예상 출력: val = 0x1234..

itsource 2022.09.03

uint8_t와 부호 없는 문자

uint8_t와 부호 없는 문자 를 사용하는 이점은 무엇입니까?uint8_t에 걸쳐서unsigned charC?C?로 표시합니까? 의 모든 있다.uint8_t는 그냥 for for for is is is for for for for is is 、 is is 、 is is is 。unsigned char럼럼왜 ?용 ???이것은 당신의 의도를 문서화합니다 - 당신은 문자가 아닌 작은 숫자를 저장합니다. 다른 더 요.uint16_t ★★★★★★★★★★★★★★★★★」int32_t.요점은 구현에 의존하지 않는 코드를 작성하는 것입니다. unsigned char여덟 살 uint8_t이랬다현학적 관점에서 말씀드리면 시스템에 따라서는 8비트 타입이 없는 경우가 있습니다.위키피디아에 따르면: 구현은 요건을 충족하는 유형..

itsource 2022.09.03

변수 이름에 댓글을 달 수 있나요?

변수 이름에 댓글을 달 수 있나요? int main() { i/*nt*/a = 10; return 0; } 위의 코드가 있고 토큰을 세고 싶은 경우 14개입니까, 13개입니까? 수수 이이 멘멘 멘멘 멘? ???「 」는, 「 」라고할 수 .int i,int a,int ia글로벌하게 정의되어 있습니다.코멘트는 프로그램 번역1 단계3에서 삭제됩니다.각 코멘트는 공백 1자로 바뀝니다.그래서 댓글은/*nt*/절대 토큰이 아닙니다. 쪽도 없는 int,main,i,a ★★★★★★★★★★★★★★★★★」return는 전처리 매크로로 정의되며 프로그램을 해석하면 14개의 토큰(13개가 아님)이 생성됩니다. int main ( ) { i a = 10 ; return 0 ; } ~가 아니면i은, 라고 하는 으로 정의됩니다.t..

itsource 2022.09.03

C/C++에서 사람들이 하는 부당한 가정을 설명하기 위한 교육 도구에는 무엇이 있습니까?

C/C++에서 사람들이 하는 부당한 가정을 설명하기 위한 교육 도구에는 무엇이 있습니까? 초보자(및 중급자) 프로그래머가 C, C++ 및 그 플랫폼에서 보증되지 않은 가정을 인식하고 도전할 수 있도록 SO를 위한 작은 교육 도구를 준비하려고 합니다. 예: "주변으로 싸매기" "모두가 ASCII를 가지고 있다" "기능 포인터를 보이드에 저장할 수 있습니다*" 소규모 테스트 프로그램을 다양한 플랫폼에서 실행할 수 있다고 생각했습니다.그것은, SO에 관한 경험으로부터, 많은 경험이 없는/반경험의 주류 개발자에 의해서 행해지는 「실현 가능한」전제를 실행해, 다양한 머신에서 어떻게 망가지는지를 기록합니다. 이 작업의 목적은 무엇인가를 하는 것이 '안전하다'는 것을 증명하는 것이 아니라(그것은 불가능하지만 테스트는..

itsource 2022.08.31

CMake에서 컴파일러가 Clang인지 테스트하려면 어떻게 해야 하나요?

CMake에서 컴파일러가 Clang인지 테스트하려면 어떻게 해야 하나요? 크로스 플랫폼 CMake 빌드 스크립트 세트가 있으며 Visual C++ 및 GCC를 사용한 빌드를 지원합니다. Clang을 테스트하고 있는데 컴파일러가 Clang인지 아닌지 CMake 스크립트를 사용하여 테스트하는 방법을 알 수 없습니다. 컴파일러가 Clang인지 아닌지를 확인하려면 무엇을 테스트해야 합니까?Visual C++와 GCC를 각각 및 를 사용하여 테스트하고 있습니다.신뢰할 수 있는 검사는 변수를 사용하는 것입니다.예: C++ 컴파일러를 확인하려면: if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # using Clang elseif (CMAKE_CXX_COMPILER_ID STREQUAL..

itsource 2022.08.31
반응형