2016-04-04 3 views
4

Я работаю над домашним заданием для реализации различных алгоритмов замены страниц для моего класса операционных систем. Проблема, что я бегу в том, что я хочу, чтобы реализовать каждый алгоритм в другом файле C, и в пределах каждого отдельного файла, используйте одни и те же имена функций как search(), insert(), updatePageTable() и т.д.Как включить только одну функцию из другого файла C

Однако, когда я компилирую файлы, компилятор жалуется на дубликаты символов. Есть ли способ просто импортировать основную тестовую функцию из каждого файла алгоритма, и эти функции ссылаются на функции своего файла?

+0

Можете ли вы попытаться объяснить свою реальную проблему вместо [этой проблемы XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –

+3

Вы можете скрыть функции внутри файла, объявив их 'static'; это хорошая практика. У вас будет хотя бы одна функция, которая не так скрыта (иногда это будет 'main()', иногда это будет какая-то другая функция). Если нестатическая функция не является 'main()', тогда у вас должен быть заголовок, объявляющий эту функцию. Заголовок должен использоваться там, где функция реализована, чтобы убедиться, что определение соответствует объявлению, и заголовок должен использоваться там, где функция используется для обеспечения правильного использования. –

+0

Обратите внимание, что данная программа может включать только одно видимое извне определение любого имени данной функции. То есть, может быть не более одного файла, который определяет глобальную (внешне видимую) функцию, называемую 'insert()', но может быть много файлов, которые определяют статическую функцию, называемую 'insert()', - но эти файлы не могут ссылаться , или даже объявили глобальную функцию. –

ответ

2

Передача комментариев 1 и 2 в ответ.

Вы можете скрыть функции внутри файла, объявив их static; это хорошая практика. У вас будет хотя бы одна функция, которая не так скрыта (иногда это будет main(), иногда это будет какая-то другая функция). Если нестатическая функция не main(), тогда у вас должен быть заголовок, объявляющий эту функцию. Заголовок должен использоваться там, где функция реализована, чтобы убедиться, что определение соответствует объявлению, и заголовок должен использоваться там, где функция используется для обеспечения правильного использования.

Обратите внимание, что данная программа может включать только одно видимое извне определение любого имени функции. То есть, может быть не более одного файла, который определяет глобальную (внешне видимую) функцию под названием insert(), например, но может быть много файлов, которые определяют статическую функцию, называемую insert(), - но эти файлы не могут ссылаться или даже объявлять , глобальная функция. Данный исходный файл может либо получить доступ к глобальной функции insert(), либо получить доступ к своей собственной статической функции insert(), но не к обоим.