Есть ли способ в рамках программы C или C++ получения информации обо всех функциях, которые можно было бы назвать? Может быть, какой-то макрос компилятора? Я знаю, что есть программы, которые могут принимать исходные файлы или файлы.o, и получать символы или прототипы, и я полагаю, что я мог бы запускать эти программы в программе ac, но мне любопытно, может быть, возвращать указатели функций на функции или массив прототипов функций, доступных в текущей области или что-то связанное?
Я не очень хорошо формулирую это, но вопрос является частью моего любопытства к тому, что я могу узнать о программе из программы (и не обязательно просто прочитав собственный код). Я сомневаюсь, что есть что-то вроде того, о чем я прошу, но мне любопытно.
Edit: Похоже, что то, о чем мне было интересно, но не очень хорошо знало, было ли отражение возможно в C или C++. Спасибо за ответ.
Язык еще не поддерживает рефлексию. Однако, поскольку вы ищете некоторые источники информации, посмотрите библиотеку Boost.Reflect
, чтобы в какой-то мере добавить отражение в свой код. Кроме того, посмотрите на ClangTooling
и libclang
для библиотек, которые позволяют выполнять автоматический анализ кода.
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
для управления видимостью функций между выпусками.
Нет.
C++ слабая метапрограммирование не включает никакой формы отражения. Однако вы можете использовать такие инструменты, как gcc-xml, для анализа программы C++ и экспорта ее содержимого в более удобный для анализа формат.
Написание собственного анализатора для C++ для извлечения объявления функции - это кошмар, если только вам не нужно делать это только в своем конкретном проекте, и вы готовы разрезать некоторые углы.