«c» 태그된 질문

C는 시스템 프로그래밍 (OS 및 임베디드), 라이브러리, 게임 및 크로스 플랫폼에 사용되는 범용 프로그래밍 언어입니다. 이 태그는 달리 지정하지 않는 한 ISO 9899 표준 (최신 버전, 9899 : 2018, C89, c99, c11 등으로 버전 별 요청에 태그 지정)에 정의 된대로 C 언어와 관련된 일반적인 질문과 함께 사용해야합니다. C는 C ++과 구별되며 합리적인 이유없이 C ++ 태그와 결합해서는 안됩니다.

2
IBM 예제 코드, 재진입 할 ​​수없는 기능이 시스템에서 작동하지 않습니다
나는 프로그래밍에서 재진입을 공부하고 있었다. 이 IBM 사이트 (정말 좋은 사이트 )에 있습니다. 아래에 복사 된 코드를 만들었습니다. 웹 사이트를 롤 다운하는 첫 번째 코드입니다. 이 코드는 "위험한 상황"에서 끊임없이 변하는 두 개의 값을 인쇄하여 텍스트 프로그램 (비동기 성)의 비선형 개발에서 변수에 대한 공유 액세스와 관련된 문제를 보여줍니다. #include <signal.h> …
11 c  gcc  signals  x86-64  data-race 

3
함수에서 고유 한 void 포인터 반환
void *CI에서 함수 를 얻으려면 다음과 같이하십시오 (매우 기본적인 예). void *get_ptr(size_t size) { void *ptr = malloc(size); return ptr; } 사용할 때 어떻게 같은 결과를 얻을 수 std::unique_ptr<>있습니까?
11 c++  c  unique-ptr 

1
컴파일러가 여기에 수신자 저장 레지스터 사용을 고집하는 이유는 무엇입니까?
이 C 코드를 고려하십시오. void foo(void); long bar(long x) { foo(); return x; } GCC 9.3에서 -O3또는로 컴파일하면 다음과 -Os같이 나타납니다. bar: push r12 mov r12, rdi call foo mov rax, r12 pop r12 ret clang의 출력 은 수신자 저장 레지스터 rbx대신 선택을 제외하고 동일합니다 r12. 그러나 다음과 같은 어셈블리를보고 …
10 c  gcc  assembly  clang  x86-64 

3
다른 컴파일러에서 C ++와 C 사이의 부호없는 비트 필드 정수 표현식이 일관되지 않음
편집 2 : 이전에 C ++ 소스 파일에 있던 함수가 C 파일로 그대로 이동하여 잘못된 결과를 반환하기 시작했을 때 이상한 테스트 실패를 디버깅했습니다. 아래의 MVE를 사용하면 GCC 문제를 재현 할 수 있습니다. 그러나 변덕스럽게 Clang (및 나중에 VS로)으로 예제를 컴파일하면 다른 결과를 얻었습니다! 컴파일러 중 하나에서 버그로 처리할지 또는 C …

1
char 값이 CHAR_MAX로 설정되어 CHAR_MIN으로 줄 바꿈이 보장됩니까?
내 코드 : #include <stdio.h> #include <limits.h> int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } 산출: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () 우리는로 char설정된 변수를 증가 CHAR_MAX시키면로 둘러싸임을 알 수 CHAR_MIN있습니다. 이 동작이 보장됩니까? 아니면 정의되지 않은 동작 또는 구현 지정 …


1
C11 Atomic Acquire / Release 및 x86_64로드 / 스토어 일관성 부족?
C11 표준의 5.1.2.4 섹션, 특히 Release / Acquire의 의미론으로 어려움을 겪고 있습니다. 나는주의 https://preshing.com/20120913/acquire-and-release-semantics/ (다른 사람의 사이가) 그 상태 : ... 릴리스 시맨틱은 프로그램 순서에서 선행하는 읽기 또는 쓰기 조작으로 쓰기 릴리스의 메모리 순서가 변경되지 않도록합니다. 따라서 다음을 위해 typedef struct test_struct { _Atomic(bool) ready ; int v1 ; int …

4
왜 main ()에서 NULL을 반환합니까?
때로는 C 및 C ++ 프로그램에서 NULL반환 값으로 사용 되는 코더가 표시 main()됩니다 (예 : #include <stdio.h> int main() { printf("HelloWorld!"); return NULL; } 이 코드를 gcc로 컴파일하면 다음과 같은 경고 메시지가 나타납니다. 경고 : return은 캐스트없이 포인터에서 정수를 만듭니다 [-Wint-conversion] 이는 매크로 NULL가 확장되고 (void*) 0main의 반환 값이 유형 …
10 c++  c  null  return  return-value 

2
L2 HW 프리 페 처가 정말 도움이됩니까?
나는에있어 위스키 호수 i7-8565U 와 (두 번 더 L2 캐시 크기보다) 데이터의 512 킬로바이트를 복사 카운터 및 시간을 반환 한 분석 및 L2 HW 프리 페처의 작품에 대하여 직면 한 몇 가지 오해. 에서 인텔 매뉴얼 4 권 MSR MSR이 0x1A4비트 0 (비활성화 1) L2 HW 프리 페처를 controlloing위한의. 다음 …

1
macOS Mojave로 업그레이드 한 후 MATLAB이 더 이상 MEX 파일을 언로드하지 않습니다.
MATLAB에서 clear mex모든 MEX 파일을 메모리에서 언로드합니다 (잠기지 않은 경우). 이전 버전의 macOS에서는 간단히 clear mex명령을 실행하여 MTL 파일을 다시 컴파일하고 MATLAB을 다시 시작하지 않고 수정 된 버전을 실행할 수있었습니다 . 더 이상 모하비에서는 불가능합니다. 예를 들어 다음과 같은 간단한 MEX 파일 ( get_data_pointer.c)을 사용하십시오. #include "mex.h" void mexFunction( int …

5
동적 연결-Linux Vs. 윈도우
Windows에서 MSVC의 DLL 프로젝트에서 C / C ++ 코드를 컴파일하면 2 개의 파일이 나타납니다. MyDll.dll MyDll.lib 내가 이해 MyDll.lib하는 한 dll의 함수 위치를 나타내는 일종의 포인터 테이블이 포함되어 있습니다. 이 dll (예 : exe 파일) MyDll.lib을 사용하면 링크하는 동안 exe 파일에 포함되므로 런타임시 함수가있는 위치를 "알고" MyDll.dll사용할 수 있습니다. 그러나 …

4
문자형 배열을 문자열로 어떻게 사용해야합니까?
C의 문자열은 문자 배열이라는 것을 알고 있습니다. 그래서 다음 코드를 시도했지만 가비지 출력 또는 프로그램 충돌과 같은 이상한 결과가 나타납니다. #include <stdio.h> int main (void) { char str [5] = "hello"; puts(str); } 왜 작동하지 않습니까? 로 깔끔하게 컴파일됩니다 gcc -std=c17 -pedantic-errors -Wall -Wextra. 참고 : 이 게시물은 문자열을 선언 …

2
void 포인터 (void *)가 두 가지 데이터 유형 중 하나인지 확인하는 방법은 무엇입니까?
2 type초의 매개 변수 를 허용하려는 함수를 작성 중입니다. A string(char *) structuren 개의 요소가있는 A. 그리고 이것을 달성하기 위해 void *매개 변수 유형 으로 간단한 것을 사용할 생각입니다 . 그러나 매개 변수가 하나의 유형인지 다른 유형인지 안전하게 확인하는 방법을 모르겠습니다.
10 c  gcc  types  clang 

2
정의되지 않은 C ++ 동작이 C 정의 된 동작을 충족하면 어떻게됩니까?
*.cppC 컴파일러가 아닌 C ++로 컴파일 하는 파일이 있습니다. 포함 함수는 C (정확한 경우 수정하십시오!)로 정의 된 것처럼 보이는 캐스트 (마지막 줄 참조)에 의존하지만이 특수 유형의 C ++에서는 그렇지 않습니다. [...] C++ code [...] struct sockaddr_in sa = {0}; int sockfd = ...; sa.sin_family = AF_INET; sa.sin_port = htons(port); bind(sockfd, …

3
C에서 문자열 정의의 세부 사항은 무엇입니까?
수업 중 하나에 대한 숙제 질문에 답변해야합니다. 특히, C의 특정 배열이 문자열로 간주되는지 여부를 말해야합니다. 이 기사 ( https://www.geeksforgeeks.org/strings-in-c-2/ )를 기반으로 문자열은 끝에 null 종결자가있는 문자 배열이라는 것을 알고 있습니다. 내 주요 끊기는 다음과 같은 배열에 대해 묻는 질문의 일부입니다. char c1[] = { 'C', 'S', '\0', '3', '2', '4', …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.