【问题标题】:Implicit declaration of function in recursive call C递归调用 C 中函数的隐式声明
【发布时间】:2019-11-24 21:37:47
【问题描述】:

我正在尝试编写一个递归函数来列出所有目录,直到输入常规文件,但我收到以下错误:

1.c:25:21: 警告:函数的隐式声明 'changeDirectoryAndGetFileName' 在 C99 中无效 [-Wimplicit-function-declaration] if(!isFile(sf)) changeDirectoryAndGetFileName(); ^

生成了 1 个警告。 架构 x86_64 的未定义符号: “_changeDirectoryAndGetFileName”,引用自: 1-b3c344.o 中的 _changeDirectoryAndGetFilename ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

Here is my code:

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>

void listCurrentDirectory(){
    DIR *d;
    struct dirent *entry;
    d = opendir(".");
    while((entry=readdir(d)) != NULL)printf("%s\n", (*entry).d_name);
    closedir(d);
}

int isFile(char *fname){
    struct stat pstat;
    stat(fname, &pstat);
    return S_ISREG(pstat.st_mode);
}

char *changeDirectoryAndGetFilename(){
    listCurrentDirectory();
    char sf[] = "Placeholder";
    scanf("%s", sf);
    printf("File selected: %s\n", sf);
    if(!isFile(sf)) changeDirectoryAndGetFileName();

    return "d";
}

int main(int argc, char *argv[]){

    if(argc != 2){
        printf("code(-c) or decode(-d)\n");
        return 1;
    }
    changeDirectoryAndGetFilename();
    return 0;
}

【问题讨论】:

    标签: c recursion


    【解决方案1】:

    架构 x86_64 的未定义符号:“_changeDirectoryAndGetFileName”,引用自:_changeDirectoryAndGetFilename

    注意与调用函数相比,被调用函数名称中n 的大写。换句话说:changeDirectoryAndGetFilename 确实被定义了,但是 changeDirectoryAndGetFileName(大写 N)没有。

    【讨论】:

      猜你喜欢
      • 2012-02-29
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多