ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
219845
mazur (04.11.2010 17:22, просмотров: 33072)
Здравствуйте! Помогите разобраться с директивами. Итак, что я хочу получить. Для разных проектов используется один модуль, но в зависимости от идентификаторов компилируется нужный код. Например: Это идентификаторы. #define Type_Keys_Buttons 0 #define Type_Keys_Matrix 1 Здесь код: #if (Select_Type_Keys==Type_Keys_Buttons) код епрст код епрст код епрст #elif (Select_Type_Keys==Type_Keys_Matrix) код еклмн код еклмн код еклмн #endif В это строке мы выбираем какой тип кнопок будем использовать. Например, Кнопки или матричную клавиатуру. Скажем нужны кнопки. Объявляем: #define Select_Type_Keys Type_Keys_Buttons Компилятор подставит код от #if до #elif. С этим проблем нет, такая конструкция работает. Проблема у меня вот в чем: Когда мы используем кнопки, то и ежу понятно, что кнопок должно быть маленькое количество. Если кнопок много, то нужно использовать матрицу. Исходя из этого я поставил такое ТЗ: для кнопок свой идентификатор-однобайтные переменные, а для матрицы хочу сделать функцию. Если столбцов и строк меньше или равно 8, то автоматом подставляется идентификатор однобайтных переменных. Если больше, то ставится идентификатор двухбайтных переменных. Для обоих случаев с переменными у меня макросы с одинаковыми названиями (например, Read_Keys_Current), но в зависимости от идентификаторов разный код. Итак, как я попробовал: #if (Select_Type_Keys==Type_Keys_Buttons) ; Если выбраны кнопки, то #define Select_Size_Scan_Cod One_Byte ; объявляется этот идентификатор. #elif (Select_Type_Keys==Type_Keys_Matrix) ; Если выбрана матрица, то #elif ((COL_Size+ROW_Size)<=8) ; проверяется сумма столбцов и строк, если сумма #define Select_Size_Scan_Cod One_Byte ; меньше или равна 8, то объявляется этот идентификатор. #else ; если больше 8, то #define Select_Size_Scan_Cod Two_Bytes ; подставляется этот идентификатор. #endif Пока что-то не получается. Кто подскажет, как мне это реализовать?