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);

ご覧のとおり、5 つのパラメーターが必要な場所に 6 つのパラメーターを渡しています。私はあなたのコンパイラと同じくらい悪い一日を過ごしています。また、構造体(値による)が期待される構造体(私が推測)のアドレスを渡しています。

于 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);  

1 つ少ない引数 (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 に答える