gpt4 book ai didi

c - 强弱符号 -> double 转 char 数组

转载 作者:行者123 更新时间:2023-11-30 20:23:41 28 4
gpt4 key购买 nike

我正在尝试了解有关链接的更多信息,更具体地说,如果强符号具有相同的名称,则强符号如何覆盖弱符号。我看到了一个例子,但没有答案,我一直被困在上面。

文件1.c

char a[5];

int main() { printf("%s", a); }

文件2.c

double a = ???????;

如何在 file2.c 中设置 a ,以便链接器将其解释为字符数组,并在编译和执行这两个文件时输出“hello”?

最佳答案

正如@user3386109所指出的,不存在strongweak符号的概念在标准 C 中。一些编译器通过非标准支持这些概念,不可移植的语言扩展。

例如,GCC 支持弱符号 non-standard declaration syntax :

__attribute__((weak)) <normal_declaration>

或者preprocessor pragma :

#pragma weak <symbol>

对于 GCC,您想要的示例如下:

file1.c

#include <stdio.h>

char a[] = "Hello World";

extern double b;

int main(void)
{
printf("%s %f\n",a,b);
return 0;
}

file2.c

__attribute__((weak)) double a = 1.1;
double b = 2.2;

编译并链接:

$ gcc -o prog file1.c file2.c

运行:

$ ./prog
Hello World 2.200000

如果删除__attribute__((weak))并重建,将会出现多定义链接错误。

微软编译器仅“某种程度上”支持弱符号声明 __declspec(selectany)

在实际应用中,使用弱符号会出现链接问题,由此,即使强定义也可用,也可以链接弱符号定义。编译器(包括微软的)生成弱符号例如,在幕后处理公共(public)内联函数的链接。他们以高度监管和专业的方式做到这一点。一旦理解了弱符号,就尽力避免使用它们。

关于c - 强弱符号 -> double 转 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35664651/

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