Я пытаюсь скомпилировать пример кода 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?
Пожалуйста, опубликуйте содержимое заголовочного файла pcap.h
Пожалуйста, НЕ размещайте ссылки на код, а скопируйте / вставьте код в свой вопрос
есть только две действительные подписи для main()
: int main( void )
и int main( int argc, char *argv[] )
Отправьте сообщение минимальный воспроизводимый пример, чтобы мы могли воспроизвести проблему и помочь вам отладить ее.
@ user3629249: файл pcap.h
(и, если на то пошло, пример кода) являются частью пакета кода winpcap, а не работой OP. Так что ваш комментарий об основных прототипах не так хорошо направлен, как мог бы быть.
касательно:
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);
}
i
изменяется в строке 20 (printf("%d. %s", ++i, d->name);
), которая выполняется для каждого найденного устройства. Предположительно, разработчики winpcap (нет OP) считали бессмысленным освобождать всех разработчиков, если устройство не было найдено. В любом случае этот ответ не имеет отношения к вопросу OP. (Я согласен, что ваш тест лучше, чем их тест, fwiw. Но в конце концов эффект тот же.)
В файле, включенном перед "stdio.h", может быть что-то, что сбивает компилятор с толку. Вы по-прежнему получаете сообщение об ошибке, если попытаетесь сначала скомпилировать только один файл, содержащий "stdio.h"?