0

尝试将整数的地址传递给要作为指针接收的函数时出现编译器错误。这曾经有效,但后来我在 Makefile 中进行了一些更改,现在它不再有效。我怀疑它是否是语法,但这里是:

helper_funcs.h

void make_passive_connections(int *sockfd, Neighbor *neighbor, FILE *logfd, char this_router[64], struct sockaddr_in servAddr);

helper_funcs.c

void make_passive_connections(int *sockfd, Neighbor *neighbor, FILE *logfd, char this_router[64], struct sockaddr_in servAddr) {
    ...
}

在调用程序中

    int sockfd;
    ...
    make_passive_connections(&sockfd, &neighbor, logfd, this_router->label, &servAddr, &num_hosts);
    ...
}

编译器还告诉我我传递了太多参数。我的电脑今天过得不好还是我忽略了什么?

如果有帮助,这是我的 Makefile:

CC = gcc
CFLAGS = -c -g -Wall -Wextra
SOURCES = fork.c helper_funcs.c primary.c
DEPS = primary.h fork.h helper_funcs.h
OBJECTS = $(SOURCES:.c=.o)
EXECUTABLE = primary

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(OBJECTS) -o $@

#.c.o:
#   $(CC) $(CFLAGS) $< -o $@

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

clean:
    rm -f *.o
    rm -f $(EXECUTABLE)

警告:从不兼容的指针类型传递“make_passive_connections”的参数 1

编辑:我是个白痴。我忘记删除函数调用中的最后一个参数。但我的主要问题是为什么编译器认为将整数的地址传递给需要指向整数的指针的函数不起作用。这有什么问题吗?

4

2 回答 2

1

这是你的语法,我排列的方式不同:

宣言:

void make_passive_connections(int *sockfd,    Neighbor *neighbor,
                              FILE *logfd,    char this_router[64],
                              struct sockaddr_in servAddr);

称呼

make_passive_connections(     &sockfd,        &neighbor,
                              logfd,          this_router->label,
                              &servAddr,      &num_hosts);

如您所见,您传递了六个参数,其中预期有五个。我和你的编译器一样糟糕。您还传递了一个结构的地址(我假设),其中需要一个结构(按值)。

于 2013-11-09T22:31:23.493 回答
0

原型:

void make_passive_connections(int *sockfd, Neighbor *neighbor, FILE *logfd, char this_router[64], struct sockaddr_in servAddr);  

要求少一个论点(5)然后你已经通过了(6):

make_passive_connections(&sockfd, &neighbor, logfd, this_router->label, &servAddr, &num_hosts);

在第 5 个参数要求的地方struct sockaddr_in,您传递的是char *, this_router->label

将您的调用更改为:(删除最后一个参数,并仅传递this_router

 make_passive_connections(&sockfd, &neighbor, logfd, this_router, &servAddr);
于 2013-11-09T22:45:40.673 回答