如何转发声明一个将函数指针作为参数的函数?

时间:2016-09-20 15:18:55

标签: c forward-declaration

如何在C?

中转发声明具有函数作为参数的函数

这是功能:

void start_thread (void* function (void*)) {

    ...

}

我尝试将其声明为:

void start_thread (void*);

以及:

void start_thread (void* (void*));

void start_thread (void*, void*);

这些都没有被接受。为此功能转发申报的正确日期是什么时候?

编辑:

void start_thread (void (*) (void*));

收率:

Compilation error
prog.c: At top level:
prog.c:135:6: error: conflicting types for 'start_thread'
 void start_thread (void* function (void*)) {
      ^
prog.c:25:6: note: previous declaration of 'start_thread' was here
 void start_thread (void (*) (void *));
      ^

3 个答案:

答案 0 :(得分:0)

使用挡风玻璃刮水器技术(左 - 右......):

这是一个指针,所以有一个*。在函数上,(*)

它返回void,因此,void (*)

需要void*,所以void (*)(void*)

原型是void start_thread(void (*)(void*));

答案 1 :(得分:0)

对于函数定义,您有:

func flipImage(image: UIImage) -> UIImage {
    guard let cgImage = image.cgImage else {
        // Could not form CGImage from UIImage for some reason.
        // Return unflipped image
        return image
    }
    let flippedImage = UIImage(cgImage: cgImage, 
                               scale: image.scale, 
                               orientation: .leftMirrored)
    return flippedImage
}

参数是一个接受void start_thread (void* function (void*)) { 作为参数并返回void *的函数。为了更清楚定义,它应该是:

void *

所以声明应该是:

void start_thread (void *(*function)(void*)) {

答案 2 :(得分:-2)

正确的前向声明/原型将是:

void start_thread(void*(void*);