【问题标题】:Function declaration in static library in CC中静态库中的函数声明
【发布时间】:2014-08-11 09:50:39
【问题描述】:

当我尝试使用静态库编译程序时遇到问题。 我用gcc -c ft_putstr.c 创建了我的.c 文件的目标文件。然后我执行ar -rcs libft.a ft_putstr.o 然后我做gcc main.c -L. -lft 我已经

警告:函数“ft_putstr”的隐式声明在 C99。

二进制文件已创建,但我不希望出现此警告,即使它是这样工作的。 如果我在 GCC 上有 -std="c89" 标志,它就可以工作,但我有你使用 C99。

这是我的主要内容:

int main(void)
{
     ft_putstr("Bonjour");
     return (0);
}

这是我的 ft_putstr.c:

#include <unistd.h>

    void    ft_putstr(char *str) 
    {
         (*str) ? write(1, str, 1), ft_putstr(str + 1) : 0; 
    }

【问题讨论】:

  • 您是否从main.c 导入ft_putstr.h?该标头是否定义了功能?
  • 不,我不导入它,因为我看过一个视频(由我的学校提供​​),它使程序在没有任何 .h 的情况下工作。我已经尝试过使用 .h 并且可以。
  • 问题是main() 看不到。把它放在一个头文件中并用main()将它包含在文件中
  • 如果不声明ft_putstr,你总是会得到一个隐含的声明警告。见鬼,如果你愿意,你可以在 main.c 中声明它(但请不要这样做;那太愚蠢了)。
  • 我觉得比你的水平比我的高很多所以我会添加一个头文件,这是我现在认为的更好的选择。非常感谢您的帮助,如果我不愉快,我们深表歉意。它比我做的时间超过 2 小时。

标签: c gcc static-libraries compiler-warnings unix-ar


【解决方案1】:

您应该包含一个具有类似声明的头文件

void    ft_putstr(char *str);

或者你可以在你的main.c中插入这一行

extern void    ft_putstr(char *str);

【讨论】:

  • extern 在这里是多余的,所有的函数声明都是外部的,除非你特别指出static。
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 2015-07-29
  • 2012-06-04
  • 2013-09-10
  • 2013-10-14
  • 1970-01-01
相关资源
最近更新 更多