程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法从 GNU 示例代码更改“extern char”标识符? 结果是我得到这个输出:大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决无法从 GNU 示例代码更改“extern char”标识符? 结果是我得到这个输出:?

开发过程中遇到无法从 GNU 示例代码更改“extern char”标识符? 结果是我得到这个输出:的问题如何解决?下面主要结合日常开发的经验,给出你关于无法从 GNU 示例代码更改“extern char”标识符? 结果是我得到这个输出:的解决方法建议,希望对你解决无法从 GNU 示例代码更改“extern char”标识符? 结果是我得到这个输出:有所启发或帮助;

GNU.org 提供了这个用于打印错误消息的示例函数:

#include <stdio.h>
#include <stdarg.h>

voID
eprintf (const char *template,...)
{
  va_List ap;
  extern char *program_invocation_short_name;

  fprintf (stderr,"%s: ",program_invocation_short_name);
  va_start (ap,templatE);
  vfprintf (stderr,template,ap);
  va_end (ap);
}

int
main(int argc,char const *argv[])
{
    eprintf ("Teste %i\n",12);
    return 0;
}

但我真的不明白。为什么我不能将 program_invocation_short_name 更改为(例如)banana?如在

extern char *banana;

结果是我得到这个输出:

海湾合作委员会:

$ gcc -fsanitize=signed-Integer-overflow -fsanitize=undefined -ggdb3 -O0 -std=c11 -Wall -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow    eprint.c -lcrypt -lcs50 -lm -o eprint

/usr/bin/ld: /tmp/ccZLCXcL.o: warning: reLOCATIOn against `bananas' in read-only section `.text'
/usr/bin/ld: /tmp/ccZLCXcL.o: in function `eprintf':
/home/username/Projects/c/lib/eprint.c:10: undefined reference to `bananas'
/usr/bin/ld: warning: creaTing DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status
make: *** [<builTin>: eprint] Error 1

铿锵:

clang -fsanitize=signed-Integer-overflow -fsanitize=undefined -ggdb3 -O0 -std=c11 -Wall -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow    eprint.c  -lcrypt -lcs50 -lm -o eprint
/usr/bin/ld: /tmp/eprint-8fa7ad.o: in function `eprintf':
/home/mitsuki/Projects/c/lib/eprint.c:10: undefined reference to `bananas'
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
make: *** [<builTin>: eprint] Error 1

解决方法

当您编写 extern 声明时,您是在告诉编译器另一个文件使用该名称和类型定义了一个变量,并且您希望能够在该文件中使用它。然后链接器将匹配两个相同名称的用法,并使它们引用相同的实际变量。如果您extern 一些还没有在别处定义的东西,您会从链接器 (ld) 收到一个错误,它基本上说“嘿,您向我保证这会在某处被定义,但它从来没有!我不能用它来制作一个工作程序。”

大佬总结

以上是大佬教程为你收集整理的无法从 GNU 示例代码更改“extern char”标识符? 结果是我得到这个输出:全部内容,希望文章能够帮你解决无法从 GNU 示例代码更改“extern char”标识符? 结果是我得到这个输出:所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。