head.h
#ifndef __HEAD_H__
#define __HEAD_H__
extern int add ( int a, int b) ;
extern int c;
#endif
add.c
int c = 10 ;
int add ( int a, int b)
{
return a+ b;
}
main.c
#include <stdio.h>
#include "head.h"
int main ( int argc, const char * argv[ ] )
{
int a = 1 ;
int b = 2 ;
printf ( "add = %d\n" , add ( a, b) ) ;
printf ( "c = %d\n" , c) ;
return 0 ;
}
Makefile
CC= gcc
OBJ= main
OBJS= main.o add.o
CFLAGS= -Wall -g
$( OBJ) : $( OBJS)
$( CC) $( CFLAGS) $^ -o $@
$* .o:$%.c
$( CC) $( CFLAGS) -c $< -o $@
.PHONY:clean
clean:
$( RM) *.o main
测试
框架:所以后的文件都在一个目录下
add.h
#ifndef __ADD_H__
#define __ADD_H__
extern int aaa;
int add ( int a, int b) ;
#endif
add.c
int aaa = 20 ;
int add ( int a , int b)
{
return a+ b;
}
sub.h
#ifndef __SUB_H__
#define __SUB_H__
int sub ( int , int ) ;
#endif
sub.c
int sub ( int a, int b)
{
return a- b;
}
main.c
#include <stdio.h>
#include "sub.h"
#include "add.h"
typedef int ( * fun_t) ( int , int ) ;
int func ( int a , int b , fun_t pfunc)
{
return ( * pfunc) ( a, b) ;
}
int main ( int argc, const char * argv[ ] )
{
int a = 20 , b = 5 ;
int ( * arrp[ 2 ] ) ( int , int ) = { add, sub} ;
printf ( "%d\n" , func ( a, b, add) ) ;
printf ( "%d\n" , func ( a, b, sub) ) ;
printf ( "%d\n" , ( * arrp[ 0 ] ) ( a, b) ) ;
printf ( "%d\n" , ( * arrp[ 1 ] ) ( a, b) ) ;
printf ( "aaa:%d\n" , aaa) ;
return 0 ;
}
Makefile
OBJS:= main.o add.o sub.o
CC := gcc
CFLAGS:= -Wall -O2 -g
main:$( OBJS)
$( CC) $( CFLAGS) $^ -o $@
main.o:main.c
$( CC) -c $< -o $@
add.o:add.c
$( CC) -c $< -o $@
sub.o:sub.c
$( CC) -c $< -o $@
.PHONY:clean
clean:
rm *.o main
OBJS:= main.o add.o sub.o
CC := gcc
CFLAGS:= -Wall -O2 -g
main:$( OBJS)
$( CC) $( CFLAGS) $^ -o $@
.PHONY:clean
clean:
rm *.o main
测试结果