你能使用其他文件中的变量而不使用include吗?
我正在阅读ffmpeg项目的代码。在该项目的fftools/ffmpeg.c文件中,第519行有一段代码:你能使用其他文件中的变量而不使用include吗?,c,ffmpeg,C,Ffmpeg,我正在阅读ffmpeg项目的代码。在该项目的fftools/ffmpeg.c文件中,第519行有一段代码: 519if(do_基准){ 520 int-maxrss=getmaxrss()/1024; 521 av_日志(空,av_日志信息,“工作台:maxrss=%ikB\n”,maxrss); 522 } 我使用gdb查找do_基准变量的定义位置: (gdb)信息变量不做基准测试 与正则表达式“do_benchmark”匹配的所有变量: 文件fftools/ffmpeg_o
519if(do_基准){
520 int-maxrss=getmaxrss()/1024;
521 av_日志(空,av_日志信息,“工作台:maxrss=%ikB\n”,maxrss);
522 }
我使用gdb查找do_基准变量的定义位置:
(gdb)信息变量不做基准测试
与正则表达式“do_benchmark”匹配的所有变量:
文件fftools/ffmpeg_opt.c:
159:int do_基准;
160:int do___all;
但是,我在fftools/ffmpeg.c文件中找不到像include fftools/ffmpeg_opt.c这样的语句。我使用find+grep无效
$find-输入f | xargs grep“ffmpeg_opt”
grep:./.git/objects/pack/pack-c2a6a6b1765b632f6fa88814ec92d3b0e4c11dad.pack:与二进制文件匹配
grep:./.git/index:与二进制文件匹配
grep:./ffmpeg:匹配到二进制文件
./fftools/ffmpeg_opt.d:fftools/ffmpeg_opt.o:fftools/ffmpeg_opt.c fftools/ffmpeg.h config.h\
grep:./fftools/ffmpeg_opt.o:匹配到二进制文件
./fftools/Makefile:OBJS ffmpeg+=fftools/ffmpeg_opt.o fftools/ffmpeg_filter.o fftools/ffmpeg_hw.o
grep:./ffmpeg\u g:匹配到二进制文件
我想尝试类似的方法,但失败了
演示-01.c
#包括“stdio.h”
内部主(空){
fptintf(标准输出,“演示:%d”,演示);
返回0;
}
演示-02.c
int-demo=0;
$gcc demo-01.c demo-02.c-o demo
demo-01.c:在函数“main”中:
demo-01.c:4:33:错误:“demo”未声明(此函数首次使用)
4 | fprintf(标准,“演示:%d”,演示);
| ^~~~
demo-01.c:4:33:注意:每个未声明的标识符在其出现的函数中只报告一次。
为什么呢
您可以使用其他文件中的变量而不使用include吗
对。如果您知道变量是如何在另一个翻译单元生成的库或对象文件中声明的,则可以在不包含头文件的情况下对变量进行extern
声明,但在本例中并非如此
我在fftools/ffmpeg.c中找不到像include fftools/ffmpeg_opt.c这样的语句
否,变量在fftools/ffmpeg.h
中声明如下:
extern int do_benchmark;
实际定义在
fftools/ffmpeg_opt.c
(如您所知)中,它将被编译到库中。这使得.c
文件(包括fftools/ffmpeg.h
在链接库时可以使用fftools/ffmpeg_opt.c
中定义的变量。即使变量是在另一个翻译单元中定义的,也必须声明该变量。您需要添加extern int demo代码>在demo-01.c中(同样,您在“fprintf”中有一个错误)@aszswaz我的答案回答了您的问题吗?如果你需要澄清,尽管问。