Я пишу простой код на языке C, и это работает.
Который компилируется и выполняется без ошибок, дает ожидаемый результат.
#include <stdio.h>
int main(void) {
struct SiteTemplate {
int views;
};
int visit(struct SiteTemplate *site) {
site -> views++;
return 0;
}
struct SiteTemplate site;
site.views = 0;
visit(&site);
printf("%d\n", site.views);
return 0;
}
Но в моем коде VS с включенным линтингом C_Cpp моя IDE показывает следующую ошибку и другие проблемы с ней.
declaration is incompatible with previous "visit" (declared at line 8)
Имея скриншот:
Этот линтинг ошибок действительно сбивает меня с толку, так как мой код работает с gcc
, он не показывает никаких ошибок при компиляции.
А еще, если я перенесу определение структуры и функции на глобальный уровень, а не внутрь main()
, то ошибок больше не будет... Но в чем ошибка declaration is incompatible
? Или есть какие-то проблемы с моим кодом?
Нажмите здесь, чтобы посмотреть другой скриншот, чтобы сохранить пробелы этой страницы.
Кстати, версия моего кода VS — 1.52.0 с линтингом C_Cpp по умолчанию.
Определение вложенной функции не является стандартным C, оно поддерживается расширениями компилятора. Согласно стандарту C, любое определение функции должно находиться за пределами любого другого определения функции.
@CasimirCrystal Нет, это просто означает, что компилятор не может правильно проверить подпись visit
. учитывая, что это нестандартная вещь, компиляторы не обязаны поддерживать это вложенное определение и могут делать странные вещи. Придерживайтесь стандартов,
Ах да, это имеет смысл. Итак,
incompatible
в сообщении об ошибке означает, что синтаксис кода несовместим со стандартом C, это правильно?