GCC находит ошибки в stdio.h MinGW - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь скомпилировать пример кода C с GCC / MinGW в Windows 7. Пример кода включает в себя некоторые локальные заголовочные файлы, которые в конечном итоге включают stdio.h, и я получаю эту ошибку при попыткедля компиляции:

c:\mingw\include\stdio.h:345:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__mingw__snprintf'
extern int __mingw_stdio_redirect__(snprintf)(char*, size_t, const char*, ...);

Это странно для меня.Как могут быть ошибки в stdio.h?

1 Ответ

0 голосов
/ 25 октября 2018

относительно:

if (i == 0)
{
    printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
    return 0;
}  
pcap_freealldevs(alldevs);

, поскольку переменная i инициализируется в 0 и никогда не изменяется, этот оператор if() всегда будет true.Одним из результатов является вызов: pcap_freealldev() никогда не будет вызван.

scope переменных должно быть ограничено настолько, насколько это разумно.

Код никогда не должен зависеть от ОС, которую нужно очистить после себя.предложить

#include <stdio.h>
#include <stdlib.h>
#include "pcap.h"

int main( void )
{
    pcap_if_t *alldevs = NULL;
    char errbuf[PCAP_ERRBUF_SIZE];

    /* Retrieve the device list from the local machine */
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)
    {
        fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
        exit(1);
    }

    /* Print the list */
    for( pcap_if_t *d = alldevs; d != NULL; d= d->next)
    {
        printf("%d. %s", ++i, d->name);
        if (d->description)
            printf(" (%s)\n", d->description);
        else
            printf(" (No description available)\n");
    }

    if ( ! alldevs )
    {
        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
    }

    /* We don't need any more the device list. Free it */
    pcap_freealldevs(alldevs);
}
...