«c» 태그된 질문

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

7
C에서 포인터 비교는 어떻게 작동합니까? 같은 배열을 가리 키지 않는 포인터를 비교해도 괜찮습니까?
K & R (C Programming Language 2nd Edition) 5 장에서 다음을 읽었습니다. 첫째, 특정 상황에서 포인터를 비교할 수 있습니다. 경우 p와 q다음의 관계가 좋아 점 같은 배열의 구성원에 ==, !=, <, >=제대로, 등 일을. 동일한 배열을 가리키는 포인터 만 비교할 수 있음을 의미하는 것 같습니다. 그러나이 코드를 시도했을 때 char …

4
포크를 호출 할 때 스레드가 복사됩니까?
스레드로 실행중인 프로그램이 fork()있고 유닉스 기반 시스템에서 호출 하면 스레드가 복사됩니까? 현재 프로세스의 가상 메모리가 생성 된 새 프로세스에 1 : 1로 복사된다는 것을 알고 있습니다. 스레드가 프로세스의 가상 메모리에 자체 스택을 가지고 있음을 알고 있습니다. 따라서 최소한 스레드 스택도 복사해야합니다. 그러나 가상 메모리에 상주하지 않아 복사되지 않는 스레드에 더 …

6
2 바이트를 부호있는 16 비트 정수로 변환하는 올바른 방법은 무엇입니까?
에서 이 답변 , zwol는 이 주장을했다 : 2 바이트의 데이터를 외부 소스에서 16 비트 부호있는 정수로 변환하는 올바른 방법은 다음과 같은 도우미 기능을 사용하는 것입니다. #include <stdint.h> int16_t be16_to_cpu_signed(const uint8_t data[static 2]) { uint32_t val = (((uint32_t)data[0]) << 8) | (((uint32_t)data[1]) << 0); return ((int32_t) val) - 0x10000u; } …

1
쓰기가 버퍼에 4K 바이트를 계속 남기는 이유는 무엇입니까?
본질적으로 다음 코드가 있습니다. int fileWrite(int file, void * pBuffer, size_t size) { size_t bytesWritten = (size_t)write( file, pBuffer, size ) ; if (bytesWritten != size) { return -1; } return 0; } 크기가 1GB이면 작동하지만 크기가 ~ 2GB이면 4K 바이트가 일관되게 남아 있습니다. 루프에서 쓰기를 래핑하고 버퍼를 위로 이동 …
30 c  linux  system-calls 

4
C와 C ++에서 (…)는 무엇입니까?
의 사용 중 하나는 C 및 C ++에서 가변 요소 ...를 나타내는 것 입니다. 그건 뭐예요? 그런 식으로 사용될 때 연산자 또는 다른 것으로 분류됩니까? 다른 자세한 내용은 ...? 편집 : 의 목적을 알고 ...있습니다. 이름과 분류에 대해 묻고 싶습니다 .C와 C ++ 모두 비슷합니다.

2
C의 BNF 문법이 빈 init-declarator 시퀀스를 가진 선언을 허용하는 이유는 무엇입니까?
C의 BNF 문법을 살펴볼 때 선언의 생산 규칙이 다음과 같이 이상하다고 생각했습니다 ( https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of% 20C % 20in % 20Backus-Naur % 20form.htm ) : <declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ; ?에 대해 *수량자를 사용하는 이유 (0 번 이상 발생) init-declarator? 이는 의미 상 유효하지 않지만 구문 과 같은 int;또는 void;구문이 유효한 구문을 …

2
2 차원 배열 앨리어싱시 예기치 않은 strlen 최적화
내 코드는 다음과 같습니다. #include <string.h> #include <stdio.h> typedef char BUF[8]; typedef struct { BUF b[23]; } S; S s; int main() { int n; memcpy(&s, "1234567812345678", 17); n = strlen((char *)&s.b) / sizeof(BUF); printf("%d\n", n); n = strlen((char *)&s) / sizeof(BUF); printf("%d\n", n); } 를 제외한 모든 최적화 수준에서 …

4
void * function ()은 함수에 대한 포인터 또는 void *를 반환하는 함수입니까?
의 의미가 혼동 void *function()됩니다. 함수에 대한 포인터 void*입니까 아니면 함수를 반환 합니까? 나는 항상 포인터를 반환하는 재귀 함수로 데이터 구조에서 사용했지만 멀티 스레딩 ( pthread) 의 코드를 볼 때 동일한 함수 선언이 있습니다. 이제는 차이점이 무엇인지 혼란 스럽습니다.

3
C는 C ++에서 std :: less에 해당합니까?
나는 최근에 일의 정의되지 않은 동작에 질문에 대답 한 p < q경우 C에서 p와 q다른 개체 / 배열에 대한 포인터이다. C ++ <은이 경우 와 동일한 (정의되지 않은) 동작을 하지만 포인터를 비교할 수있을 때 std::less와 동일한 것을 반환하고 <할 수없는 경우 일관된 순서 를 반환하는 표준 라이브러리 템플릿 을 제공합니다 …

1
C에서 겹치는 객체의 의미는 무엇입니까?
다음 구조를 고려하십시오. struct s { int a, b; }; 일반적으로 1 이면이 구조체의 크기는 8이고 정렬은 4입니다. 두 개의 struct s객체를 생성하고 (보다 정확하게는 두 개의 객체를 할당 된 저장소에 쓰면) 두 번째 객체가 첫 번째 객체와 겹치는 경우 어떻게해야합니까? char *storage = malloc(3 * sizeof(struct s)); struct s …

5
비트 단위 연산으로 예기치 않은 가변 크기
문맥 원래 PIC 마이크로 컨트롤러 용 8 비트 C 컴파일러를 사용하여 컴파일 된 C 코드를 포팅하고 있습니다. 부호없는 전역 변수 (예 : 오류 카운터)가 0으로 롤오버되는 것을 방지하기 위해 사용 된 일반적인 관용구는 다음과 같습니다. if(~counter) counter++; 여기서 비트 연산자는 모든 비트를 반전 시키며 명령문은 counter최대 값보다 작은 경우에만 참 …

2
% 연산자보다 빠른 분할 성 테스트?
컴퓨터에서 궁금한 것을 발견했습니다. * 필기 분할 성 테스트는 %작업자 보다 훨씬 빠릅니다 . 최소한의 예를 고려하십시오. * AMD Ryzen Threadripper 2990WX, GCC 9.2.0 static int divisible_ui_p(unsigned int m, unsigned int a) { if (m <= a) { if (m == a) { return 1; } return 0; } m …

1
gcc-10.0.1 특정 Segfault
C 컴파일 된 코드 가있는 R 패키지 가 비교적 안정적이며 광범위한 플랫폼 및 컴파일러 (windows / osx / debian / fedora gcc / clang)에 대해 자주 테스트됩니다. 최근에는 패키지를 다시 테스트하기 위해 새로운 플랫폼이 추가되었습니다. Logs from checks with gcc trunk aka 10.0.1 compiled from source on Fedora 30. (For …

4
C의 절대 값 함수가 const 입력을 허용하지 않는 이유는 무엇입니까?
C에서, 절대 값 함수 (float를 받아들이는)의 프로토 타입은 float fabsf( float ); 이 프로토 타입이 다음과 같은 상수 값을 허용하지 않는 이유는 무엇입니까? float fabsf( float const ); fabsf는 입력 값을 변경하지 않습니까? 입력을 받아들이고 fabsf를 ​​호출하는 함수가 있으면 입력을 const로 지정하지 않아야합니까? 이 상황에서 const 정확성을 처리하는 적절한 방법은 …

9
C에서 '\ 0'및 printf ()
C의 입문 과정에서 문자열을 저장하는 동안 문자열 \0끝에 null 문자가 저장된다는 것을 알게 되었습니다. 그러나 문자열을 인쇄하려면 다음 문장으로 printf("hello")끝나지 않는다는 것을 알았지 만 어떻게해야합니까?\0 printf("%d", printf("hello")); Output: 5 그러나 문자열과 같은 변수가 주 메모리에 저장된다는 것을 알기 때문에 일관성이없는 것처럼 보이며 무언가를 인쇄하는 동안 주 메모리에도 저장 될 수 …
21 c  printf  stdout  c-strings 

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