代码之家  ›  专栏  ›  技术社区  ›  Delan Azabani

C语言中的奇数函数指针警告

c
  •  1
  • Delan Azabani  · 技术社区  · 14 年前

    ueach 是一个函数,它循环遍历Unicode字符串,并通过向每个字符传递单个字符串来运行回调。

    string ueach(string s, void *function(string)) {
        unsigned long i;
        for (i = 0; i < s.length; i++)
            function(uchar(s, i));
    }
    

    如果我有回电 testing :

    void testing(string c) {
        puts(utoc(c));
    }
    

    打印给定的字符( utoc 将Unicode字符串转换为UTF-8 char *

    string a = ctou("Hello, world!");
    ueach(a, &testing);
    

    但是,我得到这个警告:

    test.c: In function ‘main’:
    test.c:8: warning: passing argument 2 of ‘ueach’ from incompatible pointer type
    ulib:171: note: expected ‘void * (*)(struct string)’ but argument is of type ‘void (*)(struct string)’
    

    乌埃赫 原型如下:

    string ueach(string s, void (*function)(string)) { ... }
    

    那么它也可以正常工作,没有任何警告。

    两者有什么区别 void * (*)(struct string) void (*)(struct string) ?

    void *function(string) void (*function)(string) ?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Matthew Flaschen    14 年前
    • void * (*)(struct string) -指向返回 void *
    • void (*)(struct string) void
    • void *function(string) -函数返回 无效*
    • void (*function)(string) 无效

    第三个衰变为第一个,因为:

    运算符或一元数的大小 & 类型“函数返回类型”为 转换为具有 键入“.”

        2
  •  3
  •   Jive Dadson hmishra2250    14 年前