2013-09-12 1 views
1

Предположим, у меня есть файл заголовка abc.h, который определяет функцию foo(). Как я могу использовать функцию foo() в файле заголовка abc.h без использования #include<abc.h> в моей программе?Как использовать функцию из файла заголовка без включения заголовка в C?

я мог придумать со следующими растворами

  • Копирование функции из заголовочного файла в программу вручную. Но это не удастся для большинства случаев, когда определение функции было предварительно скомпилировано в объектные файлы. Поскольку в этом случае прототип прототипа копирования не будет полезен, потому что неразрешенные ссылки на функцию не могут быть разрешены.
  • Не делайте ничего в случае стандартных библиотек, поскольку IDE может позаботиться об этом. Но это явно неопределенное поведение и будет зависеть от IDE. Также для нестандартных библиотек он наверняка потерпит неудачу.

Как я могу использовать функцию в файле заголовка (не обязательно из стандартной библиотеки) без включения файла заголовка?

Это был вопрос интервью, поэтому это, по сути, вопрос об уловке. Не реальное использование.

+0

«это не удастся для большинства случаев, когда заголовок был предварительно скомпилирован в объектные файлы» - я не уверен, что это значит. Объявление функции с помощью '# include' совпадает с объявлением функции в исходном файле. –

+0

Почему именно вы хотите использовать функцию из файла заголовка, фактически не включив его? –

+0

Вы не можете. Если бы вы могли, то нет необходимости включать какие-либо файлы заголовков. Единственный способ - копировать и вставлять, но тогда вы также можете использовать '# include' – inixsoftware

ответ

1

Я считаю, что ключевое слово здесь «определено» в заголовочном файле, а не просто объявлено. Заголовок должен быть скомпилирован для объекта. Чтобы использовать его, вы «объявляете» функцию в своем источнике и связываетесь с объектным файлом.

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

0

Но это потерпит неудачу в большинстве случаев, когда заголовок был предварительно скомпилированных в объектные файлы

Это предложение не имеет никакого смысла. Заголовок может быть использовать для компиляции объектного файла, но они никогда не скомпилируются в объектных файлах; они всегда используются снаружи.

+0

Я имел в виду, что определения функций компилируются в объектные файлы, а прототипы функций - в файлы заголовков. Если мне не разрешено использовать заголовок в моем исходном коде, ссылка на объектный файл будет невозможна. Следовательно, копирование прототипа из заголовка не принесет пользы. Я отредактирую вопрос. –

+1

Вам не нужен заголовок для ссылки на файл объекта. Связывание - это полностью независимая операция от компиляции. –

+0

Это я, как правило, забываю. Недостаток использования IDE и разработки в Windows. Благодарю. –

Смежные вопросы