반응형

C 78

C에서 casting void 포인터는 언제 필요합니까?

C에서 casting void 포인터는 언제 필요합니까? Mitchell, Oldham, Samuel의 Advanced Linux Programming을 살펴보았습니다.저는 pthreads의 섹션에서 보이드 포인터와 캐스팅에 대해 저를 혼란스럽게 하는 것을 보았습니다. 인수를 pthread_create()로 전달하면 함수가 예상하는 것임에도 불구하고 포인터를 무효 포인터로 캐스트하지 않습니다. pthread_create( &thread, NULL, &compute_prime, &which_prime ); 여기, which_prime은 int 타입입니다. 그러나 pthread_join을 사용하여 스레드에서 반환된 값을 취하면 변수를 void 포인터로 캐스팅합니다. pthread_join( thread, (..

itsource 2023.10.09

C++에서 파일을 디프하는 방법이 있습니까?

C++에서 파일을 디프하는 방법이 있습니까? C 또는 C++ diff 라이브러리를 찾고 있습니다.유닉스를 사용할 수 있다는 것을 알고 있습니다.diff공구와 조합된system아니면exec, 하지만 도서관을 꼭 갖고 싶습니다.라이브러리에서 유닉스와 같은 패치도 수행할 수 있다면 편리할 것입니다.patch도구.좋은 해결책을 찾은 것 같습니다. DTL - Diff 템플릿 라이브러리 --- 자습서 패치를 지원합니다.저는 그것을 찾기 위해 구글에 diff.cpp를 입력해야만 했습니다.효과가 있기를 바랍니다!Google Diff, Match 및 Patch 라이브러리가 필요한 것 같습니다.이것은 "다음 출판물에 설명된 Hirschberg 선형 공간 개선으로 SES/LCS에 대한 해결책"을 구현한 것입니다. E. My..

itsource 2023.10.04

C 네임스페이스 이해

C 네임스페이스 이해 여기서 인용하자면, C에는 구조/연합/엔넘 태그 이름의 네임스페이스와 유형 ef 이름의 네임스페이스라는 두 가지 다른 유형의 네임스페이스가 있습니다. name.c $ cat name.c #include typedef long long long2; int long2 () { return 4; } int main() { printf("hello, world!"); return 0; } $ gcc name.c -o name name.c:4: error: 'long2' redeclared as different kind of symbol name.c:3: error: previous declaration of 'long2' was here $ 이름2.c $ cat name2.c #inclu..

itsource 2023.09.24

ANSIC 대 기타 C 표준

ANSIC 대 기타 C 표준 컴파일러에서 에서( )gcc다를 .C99 mode류를 하는 것과 같은 에 대한 입니다.int i 식 loop 식 loop부를 우)std=c99옵션).여기서 읽고 난 후에 나는 이해합니다.gcc-ansi,-std=c89,그리고.-std=iso9899:1990모두 ANSIC 표준에 따라 평가하지만/왜/내가 (내가 가정한 가장 최신의 표준)과 같은 새로운 표준을 선택해야 하는지 이해할 수 없습니다. 여러 의 isoC 언어의 유형 표준, 그 중 첫 번째 표준은 ANSI 표준의 직접 포트입니다.C에 대한 그들의 표준은 업데이트 될 것이지만 C에 대한 원래의 ANSI 표준은 항상 동일하다고 말하는 것이 안전합니까? 보너스 질문: 저는 사실 이것을 제 스스로 알아낼 수 있습니다. 아직 시..

itsource 2023.09.24

명령 줄에 있는 비주얼 스튜디오로 x64 코드를 컴파일하는 방법은?

명령 줄에 있는 비주얼 스튜디오로 x64 코드를 컴파일하는 방법은? 윈도우 명령줄을 사용하여 간단한 hello-world 스타일의 프로그램을 컴파일하고 싶습니다. cl file_name.c 충분히 쉽습니다.이제 64비트에서도 같은 작업을 하고 싶습니다.어떻게 해야 하나?당신은 x64 코드를 출력하는 cl.exe 컴파일러 버전을 사용해야 합니다.어떤 것이 당신의 설정에 약간 달려있습니다. 64비트 기계에 있는 경우를 생각해 보겠습니다.이를 위해서는 에 있는 컴파일러를 사용해야 합니다. c:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cl.exe 32비트 컴퓨터의 경우 다음 위치에 있는 크로스 컴파일러를 사용해야 합니다. c:\Program ..

itsource 2023.09.24

숫자 배열이 '\0' 또는 null 문자로 끝나지 않는 이유는 무엇입니까?

숫자 배열이 '\0' 또는 null 문자로 끝나지 않는 이유는 무엇입니까? 숫자 배열이 null 문자로 끝나지 않는 이유는 무엇입니까? 예를들면, char name[] = {'V', 'I', 'J', 'A', 'Y', '\0'}; 하지만 숫자 배열의 경우 끝에 null 문자가 표시되지 않습니다. 예를들면, int marks[] = {20, 22, 23}; 그 뒤에 있는 이유는 무엇입니까? 이라는 있습니다char배열은 null 문자로 끝납니다. 있는 것은 . 바로 이다입니다.chary(으)로\0: char no_zero[] = { 'f', 'o', 'o' }; char합니다.합니다. 에서 char.array는 null다입니다. 왜냐하면 null 문자를 만들었기 때문입니다.컴파일러가 널 문자를 삽입하는 유일..

itsource 2023.09.19

C에서 포인터를 변경하는 것은 원자 작용으로 간주됩니까?

C에서 포인터를 변경하는 것은 원자 작용으로 간주됩니까? 캐시 타입 메모리를 참조로 읽어주는 멀티 스레드 프로그램이 있는 경우.예상치 못한 값을 읽는 다른 스레드를 위험에 빠뜨리지 않고 메인 스레드로 포인터를 변경할 수 있습니까? 제가 볼 때, 변경 사항이 원자적인 경우 다른 스레드는 이전 값 또는 새로운 값을 읽습니다. 절대 랜덤 메모리(또는 널 포인터)는 읽지 않습니까? 어쨌든 동기화 방법을 사용해야 한다는 것은 알고 있지만 여전히 궁금합니다. 포인터 변경이 원자성입니까? 업데이트: 제 플랫폼은 64비트 Linux(2.6.29)이지만 크로스 플랫폼 답변도 원합니다. :)다른 사람들이 언급한 것처럼 C 언어에는 이를 보장하는 것이 없으며, 당신의 플랫폼에 의존합니다. 대부분의 현대 데스크톱 플랫폼에서 ..

itsource 2023.09.14

구조물 변수에 값 할당

구조물 변수에 값 할당 구조물 유형은 다음과 같이 정의됩니다. typedef struct student{ int id; char* name; double score; } Student; 저는 Student 유형의 변수를 구성하고 값을 할당하고 싶습니다.어떻게 하면 효율적으로 할 수 있을까요? int main(){ Student s1; int id = 3; char* name = getName(id); double score = getScore(id); /*Error s1 = {id, name, score}; */ /* Can I avoid assigning values individually? s1->id = id; s1->name = name; s1->score= score; */ return 0; }..

itsource 2023.08.15

C는 포인터가 참조되지 않은 상태에서 포인터가 경계를 벗어났는지 확인합니까?

C는 포인터가 참조되지 않은 상태에서 포인터가 경계를 벗어났는지 확인합니까? 저는 C의 경계를 벗어난 포인터가 무시되지 않더라도 정의되지 않은 동작을 일으킨다고 말하는 사람들과 이 논쟁을 했습니다.예: int a; int *p = &a; p = p - 1; 여기서 세 번째 줄은 다음과 같은 경우에도 정의되지 않은 동작을 유발합니다.p무시되지 .*p사용되지 않음). 제 생각에는, C가 포인터를 사용하지 않고 포인터가 경계 밖에 있는지 확인하는 것은 비논리적으로 들립니다(마치 누군가가 그의 집에 들어올 경우에 대비하여 거리의 사람들이 총을 소지하고 있는지 검사하는 것과 같습니다).가장 이상적인 것은 사람들이 집에 들어가려고 할 때 그들을 검사하는 것입니다.)저는 C가 그것을 확인한다면 많은 런타임 오버헤드가..

itsource 2023.08.05
반응형