c语言 调用 子目录中文件里的函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 调用 子目录中文件里的函数相关的知识,希望对你有一定的参考价值。
main函数所在的main.c文件在base文件夹里,base文件里有sub文件夹及sub2文件夹
func函数所在的file.c文件在sub文件下
目录结构:
base (文件夹)
|---------------sub (文件夹)
|---------------sub2 (文件夹)
文件包含关系:
base里有main.c
sub里有file.c
main.c里的main函数里面会调用 file.c里的func函数,如何实现?
注:不用集成开发环境建工程,是在linux 下用gcc 直接编译链接的。
使用stdlib.h头文件声明的system()函数
_CRTIMP int __cdecl system (const char*);
system("dir c:\\ /a:h /b > c:\\dir.txt");
调用系统命令dir,把c:目录下文件列表写入文件dir.txt中
二,使用dirent.h头文件中声明的opendir(),readdir()函数
示例代码:
int main(int argc, char *argv[])
DIR *directory_pointer;
struct dirent *entry;
if((directory_pointer=opendir("d:\\XL"))==NULL)
printf( "Error opening \n ");
else
while((entry=readdir(directory_pointer))!=NULL)
printf("%s\n",entry-> d_name);
closedir(directory_pointer);
system("PAUSE");
return 0;
三,如果没有dirent.h,可以使用io.h头文件中声明的_findfirst(),_findnext()函数
示例代码:
int main(int argc, char *argv[])
long file;
struct _finddata_t find;
_chdir("d:\\");
if((file=_findfirst("*.*", &find))==-1L)
printf("空白!\n");
exit(0);
printf("%s\n", find.name);
while(_findnext(file, &find)==0)
printf("%s\n", find.name);
_findclose(file);
system("PAUSE");
return 0;
参考技术A 你是说直接编译吗?VC++ 6.0 编译器:
CL Amain.c sub\file.c sub2\file2.c
就生成 Amain.exe 了。
例如:
主文件里有 原型声明 extern void hello(char *name);
有 调用 hello("abcd");
file.c 里有:
#include <stdio.h>
void hello(char *name)
printf("hello %s !\n", name);
跑 Amain.exe 就可以了。 参考技术B 写个Makefile , 以下在msys下测过 没问题
/* base 下的 main.c */
#include <stdio.h>
#include "./sub/file.h" /* 注意 sub前面是 点和缸 */
int main()
printf("enter main function!\n");
hello("veket_linux");
printf("back to main!\n");
return 0;
/* base 下的 sub 下的 file.c */
#include <stdio.h>
extern void hello(char *name)
printf("this is hello function, hello %s !\n", name);
/* base 下的 sub 下的file.c的头文件 file.h */
extern void hello(char *);
#base 下的 Makefile
main:main.o file.o
gcc -o main main.o ./sub/file.o -I"./sub"
main.o:main.c
gcc -c main.c
file.o:./sub/file.c
cd ./sub && gcc -c file.c && cd ..
终端下 在base 目录敲make命令
make就会自动调用命令显示如下
gcc -c main.c
cd ./sub && gcc -c file.c && cd ..
gcc -o main main.o ./sub/file.o -I"./sub"追问
能不能在base下有个makefile,在sub下也有个makefile,在base目录下,敲make,base下的makefile会自动调用sub下的makefile,然后自动链接?
因为,如果sub不止一个时(可能还有sub1,sub2.....subN),在base下的makefile里把这些子目录中的文件都能包括了,会很麻烦很麻烦,就像linux内核一样,在不同级的目录下,都有一个makefile,在最上层的目录下,make就可以调用子目录下的众多makefile,并逐层深入的进行make.
还没到那水平
请自行baidu、google搜索
答你的问题前粗略搜了一下 貌似 csdn 上 有讲
############ Path Environment Setting #######
DESTDIR=./
LIBDIR=$(HOME)/lib
INCDIR=$(HOME)/include
OBJDIR=./obj/
############ Macro Variable Setting #######
H=.h
O=.o
C=.c
CC=gcc
############# Compile Flag Setting #############
CFLAGS= -g
############# General Compile Rules #############
EXEC=$(DESTDIR)/test
OBJS=main.o ./sub/file.o ./sub2/file2.o
all: $(OBJS)
.SUFFIXES:..c .o
.c.o:
$(CC) -c $(CFLAGS) $<
############# EXEC Compile Rules #############
$(EXEC): $(OBJS)
$(CC) -o $(EXEC) $(OBJS) $(CFLAGS) -L$(LIBDIR)
二:make命令追问
能不能在base下有个makefile,在sub下也有个makefile,在base目录下,敲make,base下的makefile会自动调用sub下的makefile,然后自动链接?
因为,如果sub不止一个时(可能还有sub1,sub2.....subN),在base下的makefile里把这些子目录中的文件都能包括了,会很麻烦很麻烦,就像linux内核一样,在不同级的目录下,都有一个makefile,在最上层的目录下,make就可以调用子目录下的众多makefile,并逐层深入的进行make.
以上是关于c语言 调用 子目录中文件里的函数的主要内容,如果未能解决你的问题,请参考以下文章