gpt4 book ai didi

c 你可以在不使用包含的情况下使用其他文件中的变量吗?

转载 作者:行者123 更新时间:2023-12-04 22:57:44 24 4
gpt4 key购买 nike

我正在阅读ffmpeg项目的代码。在这个项目的fftools/ffmpeg.c文件中,第519行有一段代码:

519         if (do_benchmark) {
520 int maxrss = getmaxrss() / 1024;
521 av_log(NULL, AV_LOG_INFO, "bench: maxrss=%ikB\n", maxrss);
522 }
我使用 gdb 来查找 do_benchmark 变量的定义位置:
(gdb) info variables do_benchmark
All variables matching regular expression "do_benchmark":

File fftools/ffmpeg_opt.c:
159: int do_benchmark;
160: int do_benchmark_all;
但是,我在 fftools/ffmpeg.c 文件中找不到像 include fftools/ffmpeg_opt.c 这样的语句。我使用 find + grep 无济于事。
$ find . -type f | xargs grep 'ffmpeg_opt'
grep: ./.git/objects/pack/pack-c2a6a6b1765b632f6fa88814ec92d3b0e4c11dad.pack:Match to binary file
grep: ./.git/index:Match to binary file
grep: ./ffmpeg:Match to binary file
./fftools/ffmpeg_opt.d:fftools/ffmpeg_opt.o: fftools/ffmpeg_opt.c fftools/ffmpeg.h config.h \
grep: ./fftools/ffmpeg_opt.o:Match to binary file
./fftools/Makefile:OBJS-ffmpeg += fftools/ffmpeg_opt.o fftools/ffmpeg_filter.o fftools/ffmpeg_hw.o
grep: ./ffmpeg_g:Match to binary file
我想尝试类似的方法,但失败了。
演示-01.c
#include "stdio.h"

int main(void){
fptintf(stdout, "demo: %d", demo);
return 0;
}
演示-02.c
int demo = 0;
$ gcc demo-01.c demo-02.c -o demo
demo-01.c: In the function ‘main’:
demo-01.c:4:33: Error: ‘demo’ is not declared (first use in this function)
4 | fprintf(stdout, "demo: %d", demo);
| ^~~~
demo-01.c:4:33: Note: Each undeclared identifier is only reported once in the function in which it appears.
这是为什么?

最佳答案

Can you use variables from other files without using include?


是的。如果您知道如何在另一个翻译单元生成的库或目标文件中声明变量,您可以创建 extern不包括头文件的变量声明——但这不是在这种情况下发生的事情。

I cannot find a statement like include fftools/ffmpeg_opt.c in the fftools/ffmpeg.c


不,变量声明为 externfftools/ffmpeg.h像这样:
extern int do_benchmark;
实际定义在 fftools/ffmpeg_opt.c (如您所见),它将被编译到库中。这使得 .c 成为可能文件包括 fftools/ffmpeg.h使用 fftools/ffmpeg_opt.c 中定义的变量与图书馆链接时。

关于c 你可以在不使用包含的情况下使用其他文件中的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67792026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com