За и против Другой макро-функции / встраивают методы в C

Думайте о нем этот путь

, у Вас есть 4 веб-сервера и набор приложений Windows, которые используют тот же код SQL Теперь, Вы поняли, что существует небольшая проблема с кодом SQL также - Вы скорее...... изменяете proc в 1 месте или продвигаете код ко всем веб-серверам, переустанавливаете все настольные приложения (clickonce, мог бы помочь) на всех полях окон

, я предпочитаю сохраненный procs

, также легче сделать тестирование производительности против proc, поместить его в запрос статистика набора анализатора io/time на наборе showplan_text на и вуаля

никакая потребность выполнить профилировщика для наблюдения точно, что называют

просто мои 2 цента

9
задан Robert S. Barnes 15 October 2009 в 10:24
поделиться

3 ответа

Говоря о конкретном использовании макросов, то есть макросов, которые действуют как «функции», я бы упомянул следующие преимущества макросов, которые не могут быть реализованы во встроенных функциях:

Ленивое вычисление аргументов. Например, такой макрос

#define SELECT(f, a, b) ((f) ? (a) : (b))

сохранит свойства ленивого вычисления аргументов тернарного оператора: оценивается только выбранный параметр, а другой - нет. Простой аналог встроенной функции будет оценивать оба аргумента заранее, тем самым выполняя дополнительную ненужную работу.

Доступ к контексту. Макросы можно использовать для реализации некоторого подобия «локальных функций», то есть повторяющихся фрагментов кода, которые имеют доступ к локальной переменной и параметрам включающей функции.

Независимость от типа (и параметров типа). Макросы позволяют писать «функции», не зависящие от типа (см. Пример выше). А в случае, если вы не можете избавиться от зависимости от типа, вы можете передавать типы в качестве параметров в макрос.

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

16
ответ дан 4 December 2019 в 10:04
поделиться

Одним из преимуществ использования ключевого слова inline является то, что вы получаете проверку типов аргументов через прототип функции. Используя макросы, вы не получите ничего подобного, поэтому макросы могут создавать странные ошибки, если вы помещаете в них элементы неправильного типа. (Хотя и близко не так ужасно, как ошибки шаблонов в C ++.)

Одним из преимуществ использования макросов является то, что вы можете делать забавные вещи, такие как конкатенации и превращение аргумента макроса в строку с помощью #arg. Еще один плюс использования макросов препроцессора заключается в том, что вы можете легко проверить, как они расширяются, используя cpp для их раскрутки. Вот как вы отлаживаете эти ошибки.

Еще одна полезная особенность макро-определенных функций заключается в том, что вы можете вставить в них оператор return , чтобы остановить родительскую функцию, если вам нужно.

5
ответ дан 4 December 2019 в 10:04
поделиться

Единственное преимущество, которое я вижу в использовании любой из конструкций, - это ускорение кода.

Итак, выберите тот метод, который дает самый быстрый код!

Если это все, то же самое, тогда я считаю его более разборчивым

  1. «стандартная» функция
  2. встроенная функция
  3. #define ... do {} while (0) подход
  4. макрос с выражениями, разделенными запятыми
0
ответ дан 4 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: