C,函数没有被调用,原型(prototype)在 main() 之前

标签 c function

这是一个硬件分配,用于复制文件并使用系统调用检查内容是否相同。

在包含语句之后我有一个原型(prototype):

#include <stdio.h>
#include <stdlib.h>
//three includes to use open
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h> //system calls if sys/syscalls.h does not work
//this give specific error code
#include <errno.h>
extern int errno;

void check_same(char *argv1, char *argv2);

然后我的主要功能:

int main(int argc, char* argv[]){
    //mimic fd[0] for read and fd[1] for write
    int fd0, fd1; 
    //return value from read greater than 0 is ok, 0 is EOF, <0 is an error
    int num_bytes;
    //BUFSIZ is 4096 or can be set to 1024, etc but larger is more efficient (bytes)
    char buf[BUFSIZ]; //char *buf for read and write, tracks file pos.
.
.
.
/*function gets called after I copy the file and close the file descriptors*/
if((close(fd1)) <0){
        printf("Write file not closed\n");
        exit(1);
    }

//compare 2 files for sameness
//int same = 0;
check_same(argv[1], argv[2]);

return 0;
}

然后是函数定义:

void check_same(char *argv1, char *argv2){
    printf("in check_same\n");
    //to open files and count bytes read
    int f0, f1, count;
    //position in each file
    int pos1, pos2;
    //buffer size 1 to check each char
    char orig[1];
    char copy[1];
.
.
.

第一个printf()语句没有显示在控制台上,所以我知道它甚至没有到达那里。

我尝试将返回类型更改为 int但从文件argv[1]中获得成功复制的相同结果提交 argv[2]但功能check_same()没有被叫到。我还应该检查什么? 如需完整的可重现示例,请参阅链接的评论。

最佳答案

在问题中未包含的代码中,您的 if 语句缺少大括号:

if((write(fd1, buf, num_bytes))!=num_bytes)
    printf("Write error %d\n", num_bytes);
    exit(1);

这意味着它总是在到达那里时退出。

如果您使用 gcc,您可以使用 -Wall 收到有关此问题的警告。 (至少始终将 -Wall 传递给您的编译器。)

关于C,函数没有被调用,原型(prototype)在 main() 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441181/

相关文章:

c - 文件不能在 C 中正确打印?

将无符号整数变量转换为有符号变量

c - 字符数组的 sizeof

python - 如何在组中计算特定值?

javascript - 如何引用javascript方法?

c - 解决 valgrind 中的无效写入错误

c++ - 通过传递引用或返回它来初始化结构是更好的风格吗?

function - 计算Python中的非空行和这些行的长度总和

php - 我可以在函数声明中省略大括号吗?

jQuery onclick 函数仅适用于第一个 <div>,为什么?