You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言代码编译报LNK2019未解析外部符号错误,求排查

解决LNK2019未解析外部符号错误及代码中的其他问题

你遇到的LNK2019错误,核心原因是代码里存在函数指针传递错误,同时还有数组访问的语法问题,导致链接器无法正确识别int_sum函数的引用。咱们一步步拆解修复:

1. 修复main函数中的函数指针传递错误

在main里调用summary时,你错误地直接调用了int_sum(arr, LEN),把函数的返回值(void*类型)传给了需要函数指针的第三个参数。summary的第三个参数要求是void *(*func)(void*, int)类型的指针,正确的做法是直接传递函数名int_sum(函数名本身就是指向该函数的指针):

原错误代码:

int *sum = summary(arr, LEN, int_sum(arr, LEN));

修复后:

int *sum = summary(arr, LEN, int_sum);

2. 修复宏中的数组访问语法错误

在sum_mac宏里,void* arr不能直接用arr[i]访问元素——因为void类型没有固定大小,编译器无法计算arr[i]的内存偏移量。正确的做法是先把arr强制转换为type*类型,再通过下标访问元素:

原错误代码:

*sum = *sum + *((type*)arr[i]);

修复后(两种写法都可以):

// 写法1:更直观
*sum = *sum + ((type*)arr)[i];
// 写法2:用+=简化
*sum += ((type*)arr)[i];

3. 可选:清理宏调用后的冗余分号

你的宏调用sum_mac(int_sum,int);末尾的分号,会在宏展开后变成函数定义后面多一个分号。虽然C语言允许这种写法,但可能触发编译器警告,建议去掉分号:

sum_mac(int_sum,int)

修复后的完整代码

#include <stdio.h>
#include <stdlib.h>

#define LEN 5

#define sum_mac(func,type)\
    void* func (void* arr, int size)\
    {\
        int i;\
        type *sum = (type*)malloc(sizeof(type));\
        if(sum == NULL)\
        {\
            printf("Error\n");\
            exit(1);\
        }\
        *sum = 0;\
        for(i = 0; i<size ; i++)\
        {\
            *sum += ((type*)arr)[i];\
        }\
        return sum;\
    }
sum_mac(int_sum,int)

void *summary(void* arr, int size, void *(*func)(void*, int))
{
    if (func == NULL)
        return NULL;
    return (*func)(arr, size);
}

int main()
{
    int arr[] = { 1,2,3,4,5 };
    int *sum = summary(arr, LEN, int_sum);
    printf("the sum is: %d ", *sum);
    free(sum);
    return 0;
}

现在编译运行这段代码,就能正常输出the sum is: 15,LNK2019错误也会消失。

内容的提问来源于stack exchange,提问作者safaa tareef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:48