gpt4 book ai didi

我可以更改另一个 c 文件中符号(函数)的属性吗?

转载 作者:行者123 更新时间:2023-11-30 15:43:44 24 4
gpt4 key购买 nike

我尽量保持这个简单(即使我有一个相关的问题正在运行,但这应该是更普遍的。

当我声明一个函数时extern void foo(void)有了原型(prototype)并在同一个 C 文件中调用它,我可以给它属性 weak在另一个 C 文件中?

原因是这样的:是否extern功能foo()的实现取决于某些构建选项,并且可能或可能不会添加到二进制文件中。如果不是,我(显然)会收到错误 undefined reference 。这就是为什么我想声明它很弱(使用来自 GCC 的 __attribute__((weak)) 或使用 #pragma weak 。出于某种原因(这里需要很长的解释)我想在一个单独的 C 文件中执行此操作,而不添加 #pragma 。/attribute 到原始声明中? - 有办法做到这一点吗?如果我只是将 #pragma weak foo 添加到另一个 C 文件,它将不起作用。(我使用的是 GCC 4.8.1)

//编辑:根据要求一些代码:注:执行foo 链接到该项目

函数.c

extern void foo(void);
// #pragma weak foo <-- If I add it here, it links without problems

void bar(void)
{
foo();
}

WeakDeclaration.c

#pragma weak foo <-- If I add it here, I get undefined reference error

//编辑2:

好吧,我会尝试详细说明我的问题 - 有没有办法使符号 foo具有属性 weak 的链接器全局可见来自另一个 C 文件 ( WeakDeclaration.c )

最佳答案

您可以使用包含的 header 和宏命令切换编译指示:

函数.c:

#include "weak.h"
...
extern void foo(void);
#ifdef TURN_ON_WEAK
#pragma weak foo
#endif

弱.h:

#ifndef MY_WEAK_H
#define MY_WEAK_H

#define TURN_ON_WEAK

#endif

关于我可以更改另一个 c 文件中符号(函数)的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763769/

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