Я понимаю, что это не может быть реальным вопросом. Но я здесь смотрю на мой новый код, который я начинаю писать, и мне было интересно что-то.Временные кодеки без указателей функций в C?
Мне нужно написать код, который обычно должен запускаться на нескольких платформах. Я подхожу к этому, всегда, двумя способами.
Когда есть достаточные различия в платформе, существует почти полная переработка кода, тогда у меня есть отдельные каталоги для этих модулей для платформ с указанным кодом платформы, и я компилирую исходный код из каталога в зависимости от платформы.
, например:
|-- module_a
|-- module_b
| |-- linux
| |-- osx
| `-- windows
`-- module_c
Makefile будет звонить в источник из module_b, что это платформа-агностик и module_b/[ОС]/код в зависимости от платформы.
Все это прекрасно и круто, если не так много кода для перезаписи. Это, как правило, приводит к большому количеству копий/вклеиваний, которые я стараюсь избегать, потому что это может привести к ошибкам и, откровенно говоря, ощущается неуклюже.
Этот второй вариант также перекрывает проблему, с которой мне иногда приходится иметь оптимизированные и неоптимизированные версии (не спрашивать) того же кода и ситуаций, которые похожи. Это привело меня к указателям.
Это второе разрешение проблемы, также отлично работает. Тем не менее, я понимаю, что указатели на функции могут привести к проблемам с компилятором, которые не очень довольны, когда дело доходит до оптимизации кода.
Мой новый код будет иметь много из них, поэтому я заранее задаюсь вопросом, есть ли, возможно, третья возможность иметь кодовые файлы, которые являются компилятором (и, возможно, cpu?), Дружественными?
Обратите внимание, что я избегаю использования #ifdefs для этого вообще. Если это имеет значение, я программирую на C99 с gcc 5.2 (и моментальными снимками) на всех трех платформах (да, даже OSX). Поэтому я открыт для расширений.
PS Я пробовал несколько раз программистов.стак, но это призрачный город, к сожалению.
Пожалуйста, не критикуйте другие платформы, которые не могут дать ответ по плохо заданному вопросу. Как вы думаете, кто такой, какой-то оракул? Где код, который заранее вы пытаетесь написать? –
Зачем избегать '# ifdef'? Для вещей, которые можно определить статически, это лучший способ. – Adam
@Adam #ifdefs более или менее то же самое, что я делаю с условными make-файлами, поэтому они не нужны в моем случае. Возможно, избегать не было правильного слова для использования. Не использовать больше, как это. Это не заменит необходимость переконфигурации времени выполнения, которая всегда будет указана в указателях функций. – Keyframe