반응형

C 21

Vim에서 C/C++ 리팩토링(예: Eclipse에서와 같은 방법 추출)

Vim에서 C/C++ 리팩토링(예: Eclipse에서와 같은 방법 추출) Vim에서 이클립스의 리팩토링 도구와 같이 C 또는 C++ 코드에 리팩토링을 수행하는 플러그인이나 내장된 방법이 있습니까? 저는 특히 이클립스의 추출 방법 리팩토링 도구가 마음에 듭니다. 이는 새로운 방법을 통해 매개 변수를 결정하고 일반적으로 반환 값으로 사용할 변수를 추측하는 것입니다.아니요, Vim은 편집하기 좋은 환경이고 여러 가지 방법(코드 폴딩, 구문 색칠, 매크로 확장 등)으로 사용자 지정할 수 있지만 대부분의 작업은 의미 수준이 아닌 구문 수준에서 수행됩니다.심지어 코드 폴딩도 서로 반대되는 교정기와 일치합니다. 리팩토링을 제대로 하려면 AST에 대한 의미적 지식이 풍부해야 하고, 어떤 변수가 어떤 범위로 선언되는지 ..

programing 2023.10.29

C에서 추상 구문 트리 표현

C에서 추상 구문 트리 표현 저는 C에서 간단한 장난감 언어를 위한 컴파일러를 구현하고 있습니다.저는 AST의 개념적인 기능/구성에 대한 합리적인 배경을 가지고 있는 스캐너와 파서를 가지고 있습니다.제 질문은 C에서 AST를 표현하는 구체적인 방법과 관련된 것입니다.저는 온라인에서 다양한 텍스트/자료에서 세 가지 스타일을 자주 접했습니다. 노드 유형당 하나의 구조입니다. 모든 자식 구조의 첫 번째 필드인 기본 노드 "class"(구조)가 있습니다.기본 노드에는 노드 유형(상수, 이진 연산자, 할당 등)을 저장하는 열거형이 포함되어 있습니다.구조의 구성원은 구조당 하나의 집합이 있는 매크로 집합을 사용하여 액세스합니다.다음과 같습니다. struct ast_node_base { enum {CONSTANT, ..

programing 2023.10.24

scanf 형식 지정자의 별표는 무엇을 의미합니까?

scanf 형식 지정자의 별표는 무엇을 의미합니까? 이 질문에는 이미 다음과 같은 답변이 있습니다. 스캔할 형식 지정자로서 %*c%c와 %c의 차이점은 무엇입니까? (3개 답변) 닫힘7년 전에. 그래서 우연히 이 코드를 발견했는데 그 코드의 목적이 무엇인지, 어떻게 작동하는지 알 수 없었습니다. int word_count; scanf("%d%*c", &word_count); 제가 처음 생각한 것은%*dA를 참조하고 있었습니다.char포인터 또는 허용 안 함word_count복용으로 인하여char변수들. 누가 이것에 대해 좀 설명해 주실 수 있습니까?*c예를 들어 입력 "30a"의 경우 문자가 읽히지만 할당되지 않음을 의미합니다.word_count, 하지만 'a'는 무시됩니다.그*인에"%*c"의 약자ass..

programing 2023.10.24

C-store에서의 조합에 대한 질문 - 하나의 유형으로, 다른 유형으로 읽음 - 구현이 정의되어 있습니까?

C-store에서의 조합에 대한 질문 - 하나의 유형으로, 다른 유형으로 읽음 - 구현이 정의되어 있습니까? K&R에서 C의 union에 대해 읽고 있었는데, 제가 알기로는 union의 단일 변수는 여러 유형 중 어느 하나를 보유할 수 있고 어떤 것이 한 유형으로 저장되고 다른 유형으로 추출되면 순수하게 구현이 정의되는 것으로 알고 있습니다. 이제 다음 코드 스니펫을 확인해 주시기 바랍니다. #include int main(void) { union a { int i; char ch[2]; }; union a u; u.ch[0] = 3; u.ch[1] = 2; printf("%d %d %d\n", u.ch[0], u.ch[1], u.i); return 0; } 출력: 3 2 515 여기에 값을 할당합니다...

programing 2023.10.24

C(호스트 이름 및 도메인 정보)에서 현재 시스템의 전체 호스트 이름을 확인하려면 어떻게 해야 합니까?

C(호스트 이름 및 도메인 정보)에서 현재 시스템의 전체 호스트 이름을 확인하려면 어떻게 해야 합니까? C 프로젝트(POSIX)에서 현재 시스템의 완전한 이름을 얻으려면 어떻게 해야 합니까? 예를 들어, 나는 내 기계의 호스트 이름만 얻을 수 있습니다.gethostname()대학시절부터이럴 수도 있어요machine3그 답례로, 하지만 사실은 그들이machine3.somedomain.com예를들면. 이 정보를 얻으려면 어떻게 해야 합니까?가능하면 시스템()에 대한 호출을 사용하여 이 작업을 수행하고 싶지 않습니다.시스템에 대한 완전한 정규화된 이름을 얻으려면 먼저 로컬 호스트 이름을 가져온 다음 표준 이름을 검색해야 합니다. 가장 쉬운 방법은 먼저 다음을 사용하여 로컬 호스트 이름을 얻는 것입니다.unam..

programing 2023.10.24

C와 C++에서 (...)를 무엇이라고 합니까?

C와 C++에서 (...)를 무엇이라고 합니까? 의 용도 중 하나....는 C 와 C++ 의 다양한 개체를 나타내기 위한 것입니다. 이름이 무엇인가요? 그런 식으로 사용하면 오퍼레이터로 분류되나요? 다음과 관련된 기타 세부 정보...? 편집: 목적을 알고 있습니다..... C와 C++가 비슷했으면 하는 이름과 분류를 문의합니다.그것은 펑츄에이터 중 하나입니다. 6.4.6 Punctuators Syntax punctuator: one of [ ] ( ) { } . -> ++ -- & * + - ~ ! / % > = == != ^ | && || ? : ; ... = *= /= %= += -= = &= ^= |= , # ## %: %:%: 함수 선언에서는 타원이라고 합니다. 일부 컴파일러들에 의해서도 ..

programing 2023.10.14

C에서 포인터 비교는 어떻게 이루어집니까?같은 배열을 가리키지 않는 포인터를 비교해도 괜찮습니까?

C에서 포인터 비교는 어떻게 이루어집니까?같은 배열을 가리키지 않는 포인터를 비교해도 괜찮습니까? K&R(The C Programming Language 2nd Edition) 5장에서 나는 다음과 같이 읽습니다. 첫째, 어떤 상황에서는 포인터들이 비교될 수 있습니다. 만약p그리고.q음,다와 를 가리킵니다.==,!=,=이 제대로. 같은 배열을 가리키는 포인터만 비교할 수 있음을 의미하는 것 같습니다. 하지만 내가 이 코드를 시도했을 때 char t = 't'; char *pt = &t; char x = 'x'; char *px = &x; printf("%d\n", pt > px); 1가 화면에 인쇄됩니다. 저는 했습니다, , 했습니다가 pt그리고.px(적어도 제가 알기로는) 같은 배열을 가리키고 있지 않..

programing 2023.10.14

정적 어레이를 분리할 필요가 없는 이유는 무엇입니까?

정적 어레이를 분리할 필요가 없는 이유는 무엇입니까? 정적 배열을 해제할 필요가 없는 이유가 궁금합니다.동적 배열을 생성할 때 예를 들어 알고 있습니다. int *p; p = malloc(10*sizeof(int)); 다음을 사용하여 할당된 메모리를 확보해야 합니다. free(p); 함수의 정적 배열의 경우 호출된 함수가 완료되면 정적 배열이 자동으로 해제됩니다. 이해할 수 없는 것은 다음과 같은 함수를 사용하여 정적 배열을 반환하는 경우입니다. int *subFunc(){ static int a[5] = {1,2,3,4,5}; return a; } int main(){ int *p; p = subFunc(); } 실행을 완료한 후 정적 배열이 자동으로 해제되는 경우 정적 배열의 값에 올바르게 액세스하려..

programing 2023.10.14

c에서 printf를 통해 char array를 인쇄하는 방법?

c에서 printf를 통해 char array를 인쇄하는 방법? 문 닫았습니다.이 질문은 더 많아야 합니다.집중력이 있는현재 답변을 받지 않고 있습니다. 이 질문을 개선하고 싶으십니까?이 게시물을 편집하여 한 가지 문제에만 초점을 맞추도록 질문을 업데이트합니다. 5년전에 문을 닫았습니다. 이 질문을 개선합니다. 이로 인해 분할 오류가 발생합니다.수정해야 할 사항은 무엇입니까? int main(void) { char a_static = {'q', 'w', 'e', 'r'}; char b_static = {'a', 's', 'd', 'f'}; printf("\n value of a_static: %s", a_static); printf("\n value of b_static: %s\n", b_static);..

programing 2023.10.09
반응형