C 34

C에서 댓글을 #정의할 수 있습니까?

C에서 댓글을 #정의할 수 있습니까? 디버그 시스템을 하려고 하는데 작동이 안 되는 것 같습니다. 제가 이루고 싶었던 것은 다음과 같습니다. #ifndef DEBUG #define printd // #else #define printd printf #endif 방법이 있습니까?디버그 메시지가 많아서 하기 싫습니다. if (DEBUG) printf(...) code if (DEBUG) printf(...) ... 아니, 그럴 수 없다.주석은 전처리 지시사항 처리가 시작되기 전에 코드에서 제거됩니다.이러한 이유로 매크로에 주석을 포함할 수 없습니다. 또한 매크로 트릭을 사용하여 나중에 주석을 "형성"하려는 시도는 작동하지 않습니다.컴파일러는 "늦은" 코멘트를 코멘트로 인식할 필요가 없습니다. 원하는 것을 구..

programing 2023.10.16

Char에 저장된 유니코드

Char에 저장된 유니코드 저는 지금 리눅스에서 C언어를 배우고 있는데 조금 이상한 상황을 발견했습니다. C 로 char데이터 유형은 ASCII, 1바이트(8비트)입니다.ASCII 문자만 사용할 수 있다는 의미여야 합니다. 내가 사용하는 프로그램에서char input[],에.getchar다음 의사 코드와 같은 기능을 합니다. char input[20]; int z, i; for(i = 0; i < 20; i++) { z = getchar(); input[i] = z; } 뿐만 아니라 은 ASCII 입니다와 내가 입니다.@&@{čřžŧ¶'`[łĐŧđж←^€~[←^ø{&}čž 제 질문은 - 어떻게 가능할까요?C의 많은 아름다운 예외 중 하나인 것 같지만, 설명해주시면 정말 감사하겠습니다.OS, 컴파일러, ..

programing 2023.10.06

strcmp 빈 문자열

strcmp 빈 문자열 코드를 검토하던 중에 누군가가 하는 것을 보았습니다. if (0 == strcmp(foo,"")) 저는 그게 더 빠를 것 같아서 궁금합니다. if (foo[0] == '\0') 이것이 맞습니까 아니면 둘을 동일하게 만들 수 있을 정도로 strcmmp가 최적화되어 있습니까? (비록 차이가 있다고 해도 적을 거라는 것을 알고 있지만, 제 방법을 사용해서 최소한 몇 가지 지시사항은 절약할 수 있다고 생각합니다.)이 맞아요. 에 전화한 이후로.strcmp()스택 관리와 메모리 점프를 실제 strcmp 명령에 추가합니다. 문자열의 첫 번째 바이트만 확인해도 몇 가지 명령을 얻을 수 있습니다. 궁금한 점은 strcmp () 코드를 확인하십시오. http://sourceware.org/git/..

programing 2023.10.06

gcc warning: 스칼라 이니셜라이저 주위에 대괄호가 있음

gcc warning: 스칼라 이니셜라이저 주위에 대괄호가 있음 저는 아래에 정의된 룩업테이블을 가지고 있으며 GCC를 사용하고 있습니다.컴파일할 때 다음과 같은 경고가 표시됩니다. warning: braces around scalar initializer 이 경고의 의미는 무엇입니까?이 LUT를 어떻게 초기화해야 합니까?제가 이 구조물을 초기화하는 것을 잘못하고 있습니까? 도와주세요!! typedef struct TECH { float velocity1, velocity2; float temp; float measure; int id; float storage[64]; }TECH; struct TECH lut_model_1[2] = {{{296.001465}, {74.216972}, {2.025908}..

programing 2023.10.01

C를 아는 것이 실제로 당신이 더 높은 수준의 언어로 쓰는 코드를 해칠 수 있습니까?

C를 아는 것이 실제로 당신이 더 높은 수준의 언어로 쓰는 코드를 해칠 수 있습니까? 그 문제는 이미 해결된 것 같고, 두들겨 맞아 죽을 지경입니다.똑똑한 사람들은 그 주제에 대해 똑똑한 말을 했습니다.정말 좋은 프로그래머가 되기 위해서는 C를 알아야 합니다. 아니면 당신은? 저는 이번 주에 두 번 깨달음을 얻었습니다.첫 번째 사례는 제 가정이 제가 알고 있는 것 이상으로 나아가지 않는다는 것을 깨닫게 해주었습니다. 그리고 제 기계에서 실행되는 소프트웨어의 복잡성을 고려할 때, 그것은 거의 존재하지 않는 것입니다.하지만 실제로 이를 현실로 이끈 것은 이 Slashdot의 코멘트입니다. 결국 기존의 C "베어 메탈" 프로그래머들이 더 높은 수준의 언어를 구현한다고 가정하는 많은 순진한 방법들을 알게 되었습..

programing 2023.10.01

(현) 리터럴의 범위

(현) 리터럴의 범위 문자열 리터럴이 함수 밖에서 정의되지 않을까 걱정되기 때문에 저는 항상 문자열 리터럴을 반환하지 않으려고 노력합니다.하지만 저는 이게 사실인지 잘 모르겠어요.예를 들어 다음과 같은 함수를 사용해 보겠습니다. const char * return_a_string(void) { return "blah"; } 이것이 정확한 코드입니까?저에게는 효과가 있지만, 제 컴파일러(gcc)에만 효과가 있을지도 모릅니다.따라서 문제는 (현) 리터럴이 범위를 가지고 있는가, 아니면 항상 존재하는가 하는 것입니다.이 코드는 모든 플랫폼에서 괜찮습니다.문자열은 정적 문자열 리터럴로 이진으로 컴파일됩니다.예를 들어 창에 있는 경우 메모장으로 .exe를 열고 문자열 자체를 검색할 수도 있습니다. 정적 문자열이기..

programing 2023.10.01

-> C 구조체의 형식 인수가 잘못되었습니다.

-> C 구조체의 형식 인수가 잘못되었습니다. 구조체 배열의 항목에 액세스하여 다음과 같이 구조체 필드를 인쇄하려고 합니다. printList(Album *a, int numOfStructs) { int i; int j; for(i = 0; i field2); printf("%s", a[i]->field2); printf("%d", a[i]->field3); for(j = 0; j numOfStrings; j++) { printf("%s", a[i]->strings[j]); } printf("\n"); } } 하지만 나는 그런 오류들을 많이 받습니다. '->'의 잘못..

programing 2023.10.01

C# 컴파일은 헤더 파일이 필요한 상황에서 어떻게 해결됩니까?

C# 컴파일은 헤더 파일이 필요한 상황에서 어떻게 해결됩니까? 저는 C# 개발자로서 제 직업적인 삶을 보냈습니다.저는 학생으로서 가끔 C를 사용했지만 그것의 컴필레이션 모델을 깊이 연구하지는 않았습니다.최근 저는 시류에 편승하여 Objective-C를 공부하기 시작했습니다.저의 첫 걸음은 제가 기존에 가지고 있던 지식에 구멍이 있다는 것을 알게 했을 뿐입니다. 제가 조사한 바로는 C/C++/ObjC 컴파일은 만나는 모든 심볼을 사전에 선언해야 합니다.건축은 2단계로 진행되는 것으로 알고 있습니다.먼저 각 소스 파일을 개별 개체 파일로 컴파일합니다.이러한 개체 파일에는 정의되지 않은 "기호"(일반적으로 헤더 파일에 선언된 식별자에 해당)가 있을 수 있습니다.두 번째로 개체 파일을 연결하여 최종 출력을 구성..

programing 2023.09.26

구조물에 대한 포인터의 정의를 입력

구조물에 대한 포인터의 정의를 입력 나는 다음과 같은 코드를 발견했습니다. typedef struct { double x; double y; double z; } *vector; 이것이 유효한 유형 정의입니까?코드가 컴파일되고 정상적으로 실행됩니다.그냥 이게 일반적인 관행인지 궁금했어요.확실히 유효합니다.일반적으로 두 가지 유형을 함께 정의하여 이 방법을 최대한 활용할 수 있습니다. typedef struct { int a; int b; } S1, *S1PTR; 여기서 S1은 구조체이고 S1PTR은 이 구조체에 대한 포인터입니다.네.하지만 나쁜 스타일에 대해서는 저의 생각입니다.구조체의 직접적인 선언이 아니라 포인터 유형의 직접적인 선언입니다.코드를 읽을 때는 주어진 변수나 매개 변수가 포인터라는 정보(..

programing 2023.09.26

최신 C 컴파일러를 사용한 __STDC_IEC_559__의 상태

최신 C 컴파일러를 사용한 __STDC_IEC_559__의 상태 C99를 했습니다.__STDC_IEC_559__컴파일러 및 표준 라이브러리가 ISO/IEC/IEEE 60559(또는 IEEE 754) 표준을 준수하는지 테스트하는 데 사용할 수 있습니다. . 확인 방법 대부분의 C 컴파일러는 전처리기 매크로를 설정하지 않습니다.__STDC_IEC_559__. GCC의 문서에 따르면 그것은 정의하지 않습니다.__STDC_IEC_559__. 4.9.2 Clang 3.6.0 으로와 .2 및으로 테스트했습니다.glibc 코드를 2.21합니다. //test.c //#include int main(void) { #if defined ( __STDC_IEC_559__ ) //#if defined ( __GCC_IEC_5..

programing 2023.09.21