Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当前翻译单元在C语言中编译的对象的名称_C - Fatal编程技术网

当前翻译单元在C语言中编译的对象的名称

当前翻译单元在C语言中编译的对象的名称,c,C,是否有一个宏或全局变量,通过它我可以了解C中当前翻译单元将用于的目标文件的名称?我只知道源文件宏 谢谢。不在标准C中 预处理器可以作为一个单独的程序来实现,它不知道对象文件,因此它不能是一个内置宏 理论上,编译器可以生成具有对象文件名的符号,但一旦用户重命名对象文件,该符号就会失效 您可以让生成系统定义对象名称: # Compile ${module}.c to ${module}.o cc ${CPPFLAGS} ${CFLAGS} -DOBJNAME=${module}.o -c -o ${

是否有一个宏或全局变量,通过它我可以了解C中当前翻译单元将用于的目标文件的名称?我只知道源文件宏

谢谢。

不在标准C中

预处理器可以作为一个单独的程序来实现,它不知道对象文件,因此它不能是一个内置宏

理论上,编译器可以生成具有对象文件名的符号,但一旦用户重命名对象文件,该符号就会失效

您可以让生成系统定义对象名称:

# Compile ${module}.c to ${module}.o
cc ${CPPFLAGS} ${CFLAGS} -DOBJNAME=${module}.o -c -o ${module.o} ${module}.c
但关于更名的问题仍然存在

这只是一段shell代码,但我想可以将其转换为Makefile规则。

不是在标准C中

预处理器可以作为一个单独的程序来实现,它不知道对象文件,因此它不能是一个内置宏

理论上,编译器可以生成具有对象文件名的符号,但一旦用户重命名对象文件,该符号就会失效

您可以让生成系统定义对象名称:

# Compile ${module}.c to ${module}.o
cc ${CPPFLAGS} ${CFLAGS} -DOBJNAME=${module}.o -c -o ${module.o} ${module}.c
但关于更名的问题仍然存在


这只是一段shell代码,但我想它可以转换成一个Makefile规则。

我认为这是不存在的。我唯一能想到的就是你可以使用glue宏将_文件_______________________________。。。但即使这也不是你想要的,因为你会得到食品安全办公室。

我认为这是不存在的。我唯一能想到的就是你可以使用glue宏将_文件_______________________________。。。但是,即使这也不是你想要的,因为你会得到foo.c.o.

这对于具有预编译头的编译器来说有点困难。对于具有预编译头的编译器来说,这有点困难。我认为你的第三段是最重要的一点。你能真正得到这些信息的唯一途径是从链接器。如果您启用了调试,它可能也会嵌入到可执行文件中,但您必须转到平台的调试API或自己对其进行反向工程以获取信息。这可不是小事。你对重命名的对象文件的反对意见很大。我想用不同的编译选项从一个源文件中生成不同的目标文件,将不同版本的目标文件相应地链接到我程序的不同版本,并让我们在运行时识别每个已链接的组件,以使协议输出更具可读性。@user411768:在构建系统中执行此操作。我认为您的第三段是最重要的一点。你能真正得到这些信息的唯一途径是从链接器。如果您启用了调试,它可能也会嵌入到可执行文件中,但您必须转到平台的调试API或自己对其进行反向工程以获取信息。这可不是小事。你对重命名的对象文件的反对意见很大。嗯,我想用不同的编译选项从一个源文件生成不同的目标文件,将不同版本的目标文件相应地链接到我的程序的不同版本,并在运行时标识已链接的每个组件,以使协议输出更具可读性。@user411768:在生成系统中执行此操作。