, но только небольшая группа действительно знает, что делает и линии, как исследовать эти функции. Каждая строка, которая начинается с # не обрабатывается компилятором C, а по предварительной процессора C, который анализирует эти строки и производит код, который будет эффективно быть скомпилирован. В GCC, вы можете увидеть результат на этапе предварительной обработки с помощью GCC -E src.
cWhat директивы определить делает сделать препроцессор заменить каждое вхождение определения в тексте, который следует за. Замена чисто текстовая и есть несколько трюков, которые действительно удивительным. Я буду говорить о двух из них: функция, как макросы и многоканальная линия macros.Function, как macrosTo сделать функцию, как макро просто поставить обычную скобку после имени макроса и следовать имя своих аргументов. Аргументы будут заменены точная строка, что вы проходите в макрос. Быстрый пример #define print_int (х) Е ("Int% D \\ N", х); При вызове print_int (30), макрос будет расширяться toprintf ("Int% D \\ N", 30); Многострочный macrosA многострочный макрос может быть построен положить \\ в конце всего линии макроса. Этот символ указывает, что макрос продолжается на следующей строке. #define SWAP (а, б) {\\ а ^ = Ь; \\ Ь = а; \\ А ^ = Ь; \\} Скобки необходимы, поскольку этот блок должен быть оценен как одной инструкции. Без него, следующий будет не в состоянии: если (A> B) SWAP (A, B) Макросы dangerousMacros производит ошибки, которые трудно отлаживать и сложно патч. Возможные ловушки много (ошибки в приоритете операторов, автореферентными макросов, и т.д.). Эта страница все из них действительно хорошо документированы. Это было небольшое введение к более продвинутой использования C макросов. Препроцессор является мощным средством и может быть использован, чтобы сделать много хорошего материала. Чтобы узнать больше об этом можно посетить этот сайт. Подключенные компоненты Использование OpenCV