Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216

Применение директив условной компиляции

20.05.2016, 15:18. Показов 2982. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте !
Подскажите пожалуйста, для чего в этой программе используются директивы условной компиляции, программа рабочая ( #if, #elif, #else, #endif ) ?
Можно же написать программу без них. Как-то не понятно для чего тут директивы, воспринимается это как не нужная выдумка. Может это и нужно, но когда и в каких ситуациях представить не могу ???

C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//  Листинг 12.4. Применение директив условной компиляции
  //  #define VAR1 
  //  #define VAR2
 
 using System;
 namespace Pavlovs_289._1
 {
    class Class1
    {
        #if VAR1
               static void F(){ Console.WriteLine( "Вариант 1" ); }
        #elif VAR2
               static void F(){ Console.WriteLine( "Вариант 2" ); }
        #else   
               static void F(){ Console.WriteLine( "Основной  вариант" ); }
        #endif
             static void Main()
             {
                   F();
                   Console.ReadKey();
             }
     }
 }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2016, 15:18
Ответы с готовыми решениями:

Символ условной компиляции для конфигурации Trial
Создал Конфигурацию для проекта Trial В Проект > Копиляция > Символа условной компиляции для конфигурации Trial Пишу Но в...

Применение статического метода выдает ошибку компиляции
Здравствуйте. Есть примерно такая система: public abstract class StoreItem { public int Oid { get; set; } } public class...

Программное изменение директив компилятора
подскажите как программно изменить директиву компилятора, к примеру было #define DESIGN, а после, допустим, нажатия кнопки стало #undef...

8
116 / 115 / 64
Регистрация: 03.06.2013
Сообщений: 582
20.05.2016, 15:29
Владимирл, похоже на чистый пример.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
20.05.2016, 15:31
Если написать без #if все строчки будут скомпилированы в программу. С ними на выходе компиляции будет только нужный код.
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
20.05.2016, 16:26
aquaMakc, если быть точным, то оно не скомпилируется, ибо 3 метода с одинаковой сигнатурой.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
20.05.2016, 16:35
Цитата Сообщение от Lexeq Посмотреть сообщение
aquaMakc, если быть точным, то оно не скомпилируется, ибо 3 метода с одинаковой сигнатурой.
Это понятно, я не имел в виду не данный конкретный пример, а вообще по сути вопроса ТС.
Автор судя по всему не понимал зачем применять директивы препроцессора, если можно примерно так:
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 using System;
 namespace Pavlovs_289._1
 {
    class Class1
    {
             static int VAR = 1;
 
             static void Main()
             {
                   if (VAR == 1)
                             Console.WriteLine( "Вариант 1" );
                   else if (VAR == 2)
                             Console.WriteLine( "Вариант 2" );
                   else
                             Console.WriteLine( "Основной  вариант" );
                   Console.ReadKey();
             }
     }
 }
Понять ЗАЧЕМ на таких примерах действительно сложно, поскольку они оторваны от контекста БОЛЬШОЙ задачи.
0
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
21.05.2016, 17:22  [ТС]
aquaMakc,

Спасибо !

Но все таки я так и не понял по Вашим комментариям ( и других товарищей с форума ) , может я сформулировал вопрос не понятно ?

Можете еще немного пояснить, в смысле принципиального понимания ?????

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

На примере данной программы, что здесь происходит по другому работа компилятора, чем в обычной программе, без директив препроцессора ?
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
23.05.2016, 10:55
Владимирл, Конкретно в вашем примере без директив оно вообще не будет компилироваться, т.к. будет 3 функции с одинаковой сигнатурой. С директивами в exe будет только один вариант этой функции.
В моём варианте без директив в итоговый Exe будут скомпилированы все 3 варианта действий.
Придумал такой пример, где это будет нужно:
У тебя, например, программа в 3-х исполнениях. Бесплатный Lite, платный Pro и очень платный Super Ultimate.
Очень платный имеет все функции, просто платный почти все, а Lite только одну.
В таком случае директивами препроцессора ты определяешь какие функции в какое исполнение компилировать.
Если бы это делалось простыми if - тогда не самый благонадёжный пользователь может взять бесплатный lite, декомпилировать, например, программой dotPeek и перекомпилировать с максимумом функций. А с директивами он других вариантов при декомпиляции и не увидит.
0
C++
 Аватар для JustLearn
3 / 3 / 1
Регистрация: 21.10.2017
Сообщений: 121
18.11.2018, 13:31
Не по теме:
Такой же вопрос только по C++. Ответа не найти
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17899 / 13995 / 5345
Регистрация: 17.03.2014
Сообщений: 28,654
Записей в блоге: 1
18.11.2018, 14:21
JustLearn, ответ такой же как и для C#, но если есть сомнения, то создай тему в разделе C++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.11.2018, 14:21
Помогаю со студенческими работами здесь

Применение условной операции
Вычислить значение функции F при вещественных a,b,c,x, вводимых с клавиатуры. После выполнения программы выводит только 0 или 1, не...

Директивы условной компиляции
На сколько часто вы используете директивы условной компиляции? Есть ли преимущества их использования?

Аналог условной компиляции Q_OS_XXX
Есть код на плюсах: #ifdef Q_OS_LINUX pos_= this->geometry().topLeft(); #endif Как это можно провернуть в питоне? Т.е имею...

Необходимо разобраться с директивами условной компиляции
Друзья! Боюсь, что без предисловий не обойтись. Постараюсь, чтобы они были короткими. Поехали: Часть кода: #include<semaphore.h> ...

arduino ошибка условной компиляции в NewLiquidCrystal
добрый день есть некий 100% рабочий проект на "ардуине" используется "стандартный" 16х2 LCD дисплей (в 4х битном режиме) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Кастомные аллокаторы в C++ и оптимизация управления памятью
bytestream 14.04.2025
Работа с памятью в С++ всегда была и остаётся одной из самых увлекательных и сложных задач для программиста. Любой опытный C++ разработчик подтвердит: стандартные механизмы аллокации памяти – штука. . .
Организация сетей в Kubernetes и эффективное развертывание
Mr. Docker 14.04.2025
Сетевая инфраструктура Kubernetes представляет собой сложную, но хорошо спроектированную систему, которая позволяет контейнерам взаимодействовать между собой и с внешним миром. За кажущейся простотой. . .
Многопоточность в Rust: Fearless concurrency и практические примеры
golander 14.04.2025
Многопоточное программирование связано с рядом известных проблем. Наиболее распространенные из них — гонки данных (data races), взаимные блокировки (deadlocks) и условия гонки (race conditions). Эти. . .
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
Nullable типы и операторы объединения null в C#
UnmanagedCoder 12.04.2025
Многие шутят, что null — это миллиардная ошибка в программировании. И в этой шутке только доля шутки. Тони Хоар, создатель null-ссылки, сам назвал её своей "ошибкой на миллиард долларов". Почему?. . .
Аутентификация и авторизация JWT в микросервисах с API Gateway
stackOverflow 12.04.2025
В традиционных монолитных приложениях безопасность часто реализуется как единый защитный периметр - пользователь проходит аутентификацию один раз, после чего получает доступ ко всем функциям системы. . . .
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер