Нет, если вы укажете, что ваша функция будет принимать char
, она будет принимать любой символ.
"Разрешение", используемое компилятором для проверки переданных аргументов, является введите , а не набор возможных значений.
Другими словами, вам нужно использовать перечисления для этого, или перенести проверку во время выполнения, или сделать что-то ужасное, например:
static void processAorT (char typ, char *fileName) { ... }
void processA (char *fileName) { processAorT ('a', fileName); }
void processT (char *fileName) { processAorT ('t', fileName); |
(кстати, я бы не советовал).
Сказав это, я не уверен, что то, что вы предлагаете, является хорошей идеей.
Компилятор может обнаруживать недопустимые константы , но он не будет очень успешным, если параметр, переданный в IOnlyAcceptPrimeNumbers
, получен из переменной или, что еще хуже, введен пользователем.
API - это контракт между вызывающей стороной и функцией, и, если не соблюдаются правила этого контракта, вы можете делать все, что захотите, хотя, надеюсь, вы это документируете.
В другихслова, эта функция должна начинаться:
void IOnlyAcceptPrimeNumbers (int num) {
if (!isPrime (num)) return;
// do something with a prime number.
}
(или эквивалентAlent для вашей функции, которая принимает a
и t
, но не x
).Ничего не предпринимать, когда передаются недопустимые параметры, - это разумная стратегия, так как возвращать ошибку или выдавать исключение (хотя, без сомнения, некоторые будут спорить с этим).
Как вы справляетесь с этим, зависит от вас, но это необходимобыть обработанным во время выполнения просто потому, что компилятор не имеет всей информации.