2
C에서 중첩 된 함수의 표준 대안은 무엇입니까? 한 기능에 다른 기능의 범위를 부여하려면 어떻게합니까? struct와 같은 추가 매개 변수를 전달하거나, 가변 길이 입력을 사용하거나, 다른 방법이없는 한 gcc 확장을 사용하고 싶지는 않습니다.C에서 중첩 된 함수의 대체?
double findroot(double (*fp)(double), double start, double end);
그것은 인수로 함수 포인터를 하나 개의 변수에, 함수의 뿌리, F (X)를 찾아 내 특정 문제에 대한
, 나는이 기능을 가지고있다.하나만 제외하고 고정되어있는 여러 변수의 함수를 전달하고 싶습니다. 예를 들어, f (x, a, b, c). 여기서 a, b 및 c는 전달 된 모든 상수이고 x는 변경되는 유일한 변수입니다. findroot 함수를 동일하게 유지하면서 f (0, a, b, c)를 어떻게 찾을 수 있습니까?
감사합니다.
그럼 궁금한 점은 다음과 같습니다. 사전에 모든 가능성 (악의적 인 전역을 과도하게 사용하는 것을 제외하고)을 배제하는 경우 대안이 무엇입니까? 나는 그 권리를 얻었습니까? – Deduplicator
나는 디자인에 동의하지 않습니다. 콜백을 받아들이는 C로 쓰는 모든 함수에서 나는 항상 void * 포인터를 받아 들여 그 포인터를 첫 번째 매개 변수로 받아 들인다. 이것은 기능을 재진입 가능하게함으로써 좋은 소프트웨어 엔지니어링 원칙을 촉진합니다. 특히 이것은 전역을 통해 읽은 대역 외 데이터의 사용을 피합니다. 예를 들면 :'typedef double (* SINGLEVARFN) (void * ctx, double x); double findRoot (SINGLEVARFN fn, void * ctx, double start, double end); ' –
캡처 된 람다이지만 C++가 요청을 처리합니다. – AlexanderVX