Список всех доступных прототипов функций из C / C ++?

0

Есть ли способ в рамках программы C или C++ получения информации обо всех функциях, которые можно было бы назвать? Может быть, какой-то макрос компилятора? Я знаю, что есть программы, которые могут принимать исходные файлы или файлы.o, и получать символы или прототипы, и я полагаю, что я мог бы запускать эти программы в программе ac, но мне любопытно, может быть, возвращать указатели функций на функции или массив прототипов функций, доступных в текущей области или что-то связанное?

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

Edit: Похоже, что то, о чем мне было интересно, но не очень хорошо знало, было ли отражение возможно в C или C++. Спасибо за ответ.

  • 1
    Вы можете вызывать миллиарды функций из программы на языке c / c ++, хотите ли вы их все?
  • 0
    я вижу только любопытно .... будьте конкретны, что вы хотите спросить.
Показать ещё 6 комментариев
Теги:
function-pointers
function-prototypes

3 ответа

5
Лучший ответ

Язык еще не поддерживает рефлексию. Однако, поскольку вы ищете некоторые источники информации, посмотрите библиотеку Boost.Reflect, чтобы в какой-то мере добавить отражение в свой код. Кроме того, посмотрите на ClangTooling и libclang для библиотек, которые позволяют выполнять автоматический анализ кода.

4

C и C++ не имеют возможности собирать имена всех доступных функций.

Тем не менее, вы можете использовать макросы для проверки соответствия стандартам (ANSI, ISO, POSIX и т.д.), Которые затем могут использоваться, чтобы гарантировать наличие каждой стандартной функции.

Например, если _POSIX_C_SOURCE определен, вы можете (обычно) предположить, что функции, указанные POSIX, будут доступны:

#ifdef _POSIX_C_SOURCE
/* you can safely call POSIX functions */
#else
/* the system probably isn't POSIX compliant */
#endif

Изменить: если вы находитесь в системе Linux, вы можете найти некоторые общие макросы совместимости в функции feature_test_macros(7). OS X и BSD должны иметь примерно одинаковые макросы, даже если у них может не быть этой страницы руководства. Windows использует макросы WINVER и _WIN32_WINNT для управления видимостью функций между выпусками.

1

Нет.

C++ слабая метапрограммирование не включает никакой формы отражения. Однако вы можете использовать такие инструменты, как gcc-xml, для анализа программы C++ и экспорта ее содержимого в более удобный для анализа формат.

Написание собственного анализатора для C++ для извлечения объявления функции - это кошмар, если только вам не нужно делать это только в своем конкретном проекте, и вы готовы разрезать некоторые углы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню