【问题标题】:C Programming about choosing my version of a function关于选择我的函数版本的 C 编程
【发布时间】:2012-05-29 20:02:48
【问题描述】:

在函数 main() {...}

1) #include头文件string.h

2) 我对自己的文件进行原型制作,称之为 strcpy:

**char *strcpy(char *strSource , const char *dest);**

3) 我也希望在 main() 的 string.h 中使用“真正的”strlen 函数。

4) 在另一个编译文件中,我有我的 strcpy 版本。

问题:如何让链接器选择我的 strcpy 版本而不是 string.h 中的原型?

enter code here
#include <conio.h>
#include <string.h>
char *strcpy(char *source , const char *dest); 
void main()
{
char *s, *d;
strcpy(s,d);
getch();
}

#include <stdio.h>
char *strcpy(char *strDestination, const char *strSource)
{
char *ptr;
printf("made it!");
return ptr;
}

【问题讨论】:

  • 标题和标签不建议使用相同的语言。请更改它。
  • 请问您为什么要这样做?似乎有些恶毒。 :P 我的意思是为什么不把你的 strcpy 命名为不同的名字,即myStrcpy();
  • 抛开命名空间问题...const char * 表示指向您无法更改的字符的指针。为什么你的dest 会是const char*??
  • 链接器不关心声明!标头不是库。库不是标题。
  • @HostileFork:他使用了wrong order的参数,应该是char * strcpy ( char * destination, const char * source );。

标签: c


【解决方案1】:

你不能在 C 中做到这一点。这就是 C++ 引入 命名空间的原因之一。

您唯一能做的就是为您自己的函数使用一个不冲突的名称。

【讨论】:

  • 谢谢。使用不冲突的名称是显而易见的,但你确定“你不能在 C 中这样做”吗?我的问题不是是否标准,而是:能不能做到。
  • 不要使用命名空间,因为它不是纯 C。
【解决方案2】:

这不是一个标准的做法,我很确定如果你能做到,你将不得不阅读你的链接器的手册。如果您尝试移植它,则需要阅读您尝试移植到的每个平台的每个链接器的手册。

更常用的做法是用自己的名字编写自己的函数。如果您需要挂钩标准库中的功能,您可以获取该库的源代码并构建您自己的版本。

【讨论】:

  • 感谢您的评论和建议。不,我不想做那么多工作!
猜你喜欢
  • 2014-11-18
  • 2011-01-20
  • 1970-01-01
  • 2015-05-28
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2021-08-13
相关资源
最近更新 更多