gnu c 的小问题
3个文件
********************************************************************************
main.c
#include <stdio.h>
#include <fun.h>
int main(void)
{
t_fops ts;
ts.add(1,2);
return 0;
}
*************************************************************************************
fun.c
#include <fun.h>
#include <stdio.h>
void fun_add(int a, int b)
{
int sum = a+ b;
printf("a+b = %d \n", sum);
}
static t_fops fp = {
.add = fun_add,
};
**************************************************************************************************
fun.h
typedef struct fops{
void(*add)(int a, int b);
} t_fops;
*************************************************************************************
[root@arm 2]# make
gcc -g -Wall -O3 -march=i386 -I. -MMD -c -o fun.o fun.c
gcc -g -Wall -O3 -march=i386 -I. -MMD -c -o main.o main.c
main.c: In function ‘main’:
main.c:7: 警告:此函数中的 ‘ts.add’ 在使用前未初始化
gcc -o test fun.o main.o
*****************************************************************
执行:
[root@arm 2]# ./test
段错误
**************************************************************
请问,ts.add 要怎么初始化????(我不是已经在fun.c 把 add 函数初始化了吗??)要怎么改??
谢谢
------解决方案--------------------你在func.c中初始化的是一个t_fops的静态变量fp,而在main函数里面用的是另一个t_fops变量ts,他们是两个变量,ts变量没有初始化。
楼上的修改可以解决你的问题,是正确的用法(推荐)。另一个解决方法是你使用fp变量,而不要再定义新的变量:
main.c:
#include <stdio.h>
#include <fun.h>
int main(void)
{
fp.add(1,2);
return 0;
}
func.c:
#include <fun.h>
#include <stdio.h>
void fun_add(int a, int b)
{
int sum = a+ b;
printf("a+b = %d \n", sum);
}
t_fops fp = {
.add = fun_add,
};
func.h:
typedef struct fops
{
void(*add)(int a, int b);
} t_fops;
extern t_fops fp;