인수를 가변 인수 매크로로 바꾸려면 어떻게해야합니까? 예를 들어, 나는 #define REVERSE(...) ???
REVERSE(A,B,C) // expands to C,B,A
내 목표는 앞면과 뒷면 인수를 분리하는 것입니다 싶습니다는 #define APPLY(FUN,...) FUN(__VA_ARGS__)
#define FRONT(FIRST,.
malloc() 및 free()을 사용하여 메모리를 할당하는 방법을 알고 있지만 표준 C 함수로 메모리가 얼마나 남아 있는지도 확인할 수 있으므로 주기적으로 호출하여 코드에 메모리 누수가 없는지 확인할 수 있습니다. 내가 생각할 수있는 유일한 점은 오류를 반환 할 때까지 무한 루프로 malloc(1)을 호출하는 것이지만 더 효율적인 방법은 없을 것입니다.
구조체를 업데이트하고 인터럽트를 비활성화하는 함수가 있습니다. bool readBuffer()
{
__disable_irq();
rb->reader += 1; // Just an example
__enable_irq();
return true;
}
인터럽트가 비활성화되어 있기 때문에 구조의 값을 업데이트하는
위키 백과에서 순환 버퍼의 사용 가능한 공간을 확인하려면 모듈로 연산이 필요합니다. 그러나 내 구현 단순히 수행 static size_t bytes_used(const ringbuffer* rb)
{
int d = rb->writer - rb->reader;
if (d >= 0) return d;
return rb->size
VS C 컴파일러는 C99를 한 번도 해 본 적이 없기 때문에 Windows 용 gcc (끔찍한) 포트를 사용하여 데스크탑 용 원시 코드 C 개발을 항상 해왔습니다. 어쨌든, 나는 WINRT의 "원시 코드"플랫폼이 다른 컴파일러의 코드를 허용 할 것인지 또는 VS를 사용해야 할 것인지 궁금합니다. 내가 WINRT를 말할 때 내가 OS를 API를하지 말은 .
I 런타임에서 결정된 길이를 갖는 배열이 일반적으로 어레이를 선언함으로써 가능하다는 것을 알고 char buf[len];
하고 난 화합물 litral으로 배열을 선언하고 포인터의 중간에 할당 할 수 있음을 알고 char *buf;
....
buf = (char[5]) {0};
그러나 두 가지를 결합해도 작동하지 않습니다 (표준에서는 허용되지 않습
나는 문자열을 인자로 받아야하는 많은 함수를 가지고 있는데, 이것들은 char*을 사용하지만, 바이트 배열을 기대하는 모든 함수는 또한 char*을 사용한다. 문제는 null-terminator를 찾을 수 없기 때문에 모든 종류의 오버플로를 일으키는 문자열 배열 함수에 바이트 배열을 전달하는 실수를 쉽게 할 수 있다는 것입니다. 대개 어떻게 이런 경향이 있
작업중인 코드를 컴파일하는 데 문제가 있습니다. 최근 C 언어를 배우기로 결정하여 저급 언어를 더 잘 이해할 수있게되었습니다. for 루프를 만들려고했으나 c99 mode없이 루프 내에서 선언을 할 수 없다는 오류를 반환합니다. Settings>Compiler>Other Settings에 들어가서 -std=c99을 추가했지만 여전히 작동하지 않습니다. 이