大佬教程收集整理的这篇文章主要介绍了无法从 GNU 示例代码更改“extern char”标识符? 结果是我得到这个输出:,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#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,请注明来意。