В чем разница между функцией void и статической функцией void в C?

у меня два C файлы.

file1.c

int main()
{
  func(); 
  return 0;  
}

file2.c

static void func(void)
{
  puts("func called");
}

но, если я скомпилирую вышеуказанный код с помощью команды cc file2.c file1.c, я получил ниже

undefined reference to `func'
collect2: error: ld returned 1 exit status

но, если я удалить static ключевое слово внутри file2.c и скомпилировать приведенный выше код с помощью команды cc file2.c file1.c, он успешно работает.

Итак, у меня есть вопрос,в чем разница между функцией void и статической void в C?

1 ответов


в чем разница между функцией void и статической функцией void в C?

реальный вопрос должен быть в том, в чем разница между static и функции?

static функции обычно используются, чтобы избежать конфликтов имен в большом проекте. Если вы проверяете Linux источник ядра, пример в drivers/net вы увидите много static void функции там. Драйверы разработаны различными поставщиками и использованием static функции убедитесь, что они могут назвать функции так, как они хотят, не беспокоясь о конфликтах имен с другими разработчиками драйверов, не связанных.