powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Настройки компилятора...
18 сообщений из 18, страница 1 из 1
Настройки компилятора...
    #38489904
max950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
Заранее прошу прощения за "ламерскую" постановку вопроса.
Надеюсь смогу объяснить суть проблемы.

Пытаюсь программировать на VC++.
Возник следующий вопрос:

Имеем следующую конструкцию:

Код: plaintext
1.
2.
3.
4.
func1(){
      func2();
      return;
}



т.е. из одной функции вызываю другую функцию.

Если я меняю схему следующим образом:

Код: plaintext
1.
2.
3.
4.
func1(){
      return;
      func2();      
}



т.е. выхожу из функции func1 до вызова func2, то при компилировании код функции func2 не включается в конечную программу.
Это видно по конечному размеру программы.
Если ли же сделать следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int val;
val = 1;
func1(){
      if (val = 1){
         return;
      }
      else{
         func2();
      }      
}



то код func2 включается компилятором в конечную программу.
Вопрос следующий: понятно, что при таком значении переменной val, программа всегда будет выходить из func1 до вызова функции func2. Возможно ли задать каким либо образом настройку компилятора, чтобы при такой однозначности он не включал код функции func2?

Спасибо.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38490009
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
//#define func2_enable

#ifdef func2_enable
func2()
{
    //тело функции
            
}
#endif


func1()
{
    #ifdef func2_enable
        func2();
    #endif
    return;
}
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38490311
max950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38490313
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla,

+1, надо делать препроцессором.

Параметры компиляции может и можно подобрать, но работать это будет только на данном конкретном компиляторе...
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38491197
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max950
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int val;
val = 1;
func1(){
      if (val = 1){
         return;
      }
      else{
         func2();
      }      
}



А ты уверен что не хотел написать
Код: plaintext
1.
    if (val == 1){


? Я вот привыкши к VB с полпинка такую ошибку налепить могу.
И совсем непонятно чему будет равно выражение в if так как ты это записал.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38491367
_Прохожий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77И совсем непонятно чему будет равно выражение в if так как ты это записал.

Компилятор такую конструкцию представит равнозначно следущему:

Код: plaintext
1.
2.
3.
4.
5.
6.
val = 1;

if (val)
{
......
}



Т.е. присвоит переменной значение и проверит условие.
Ошибка распространенная, поэтому хороший тон писать так:

Код: plaintext
1.
2.
3.
4.
if (1 == val)
{
......
}



В случае
Код: plaintext
1.
2.
3.
4.
if (1 = val)
{
......
}



будет ошибка компиляции
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38491501
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Прохожий_Ошибка распространенная, поэтому хороший тон писать так:
Код: plaintext
1.
2.
3.
4.
if (1 == val)
{
......
}

зато читать это угробище совершенно невозможно, аж глаза болят.
Хороший компилятор должен выдавать варнинг на if( val = 1 ), а хорошим тоном является устанавливать крыжик "считать предупреждения как ошибки" и максимальный уровень предупреждений.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38491553
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка распространенная, поэтому хороший тон писать так:

if (1 == val )


Это дебилизм, а не хороший стиль.

Если у тебя не хватает, чтобы заставить свой мозг отличать присваивание от сравнения, то по-моему в программировании тебе делать нечего.
И чем признаваться публично всем в этом, лучше уж один раз в жизни сделать таки ошибку и влепить присваивание вместо сравнения, зато на всю оставшуюся жизнь запомнишь и уже никогда такую ошибку не сделаешь.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38491709
_Прохожий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivЭто дебилизм, а не хороший стиль.


Данный "Condition format" рекомендован еще в "C Coding Standard" - "Always put the constant on the left hand side of an equality/inequality comparison." И данное правило вошло в стандарты не только С/С++.
Можете называть авторов дибилами и меня причислять к их компании. Лично я сочту за честь с этими людьми рядом постоять.
А что вас так собственно возбудило? Вот уж не думал, что это старое правило, старее чем наверное любой из присутствующих здесь, может кого-то удивить или быть новым, кроме только изучающих язык.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38491735
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Прохожий_MasterZivЭто дебилизм, а не хороший стиль.


Данный "Condition format" рекомендован еще в "C Coding Standard" - "Always put the constant on the left hand side of an equality/inequality comparison." И данное правило вошло в стандарты не только С/С++.


Это ты путаешь coding conventions со стандартами. Стандарты незыблемы и обязательны к применению, конвеншены -- дело вкуса.
Я кстати ни в одном из conventions компаний где я работал такого правила не видел.

_Прохожий_Можете называть авторов дибилами и меня причислять к их компании. Лично я сочту за честь с этими людьми рядом постоять.
А что вас так собственно возбудило? Вот уж не думал, что это старое правило, старее чем наверное любой из присутствующих здесь, может кого-то удивить или быть новым, кроме только изучающих язык.

Да, назову. Когда я пишу

Код: plaintext
1.
2.
3.
4.
if (val == PI)
{
......
}




я VAL сравниваю с чем-то.

Когда я читаю

Код: plaintext
1.
2.
3.
4.
if (PI ==  ... )
{
......
}



я сразу думаю -- блин, PI -- константа, на кой хрен её с чем-то сравнивать ? это константа!

К тому же это дурацкое правило работает только если у тебя один из операндов сравнения -- rvalue.
Если lvalue оба -- всё, правило бесполезно.
Так на кой ?
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38491794
_Прохожий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivТак на кой ?

Защита от опечатки и лучшая читабельность кода, т.к. сразу видна константа с которой сравнивается выражение. В случае большой длины последнего, это действительно удобнее.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38492208
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Прохожий_MasterZivТак на кой ?

Защита от опечатки и лучшая читабельность кода, т.к. сразу видна константа с которой сравнивается выражение. В случае большой длины последнего, это действительно удобнее.

Я же говорю, БЕЗ константы смысл сразу же теряется.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38492352
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Прохожий_Защита от опечатки и лучшая читабельность кода, т.к. сразу видна константа с которой сравнивается выражение. В случае большой длины последнего, это действительно удобнее.
Так может не делать громадных условий, чтобы видеть код целиком?

Вообще это один из самых дурацких пунктов в стилях кодирования, поскольку никакой 100%-й гарантии он не дает, при том что меняет естественный поток кода. А учитывая что написание кода составляет мизерную долю по сравнению с его чтением и эта разница растет со временем жизни проекта, то данное правило только ухудшает код.

Не говоря уже о том, что я например не помню уже когда я в последний раз допускал такую опечатку, как = вместо ==. Несколько лет точно.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38492487
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все-го то случайно зашел и указал человеку на очевидную ошибку-описку (чего из вас кстати никто не заметил).
И какой резонанс....
MasterZivИ чем признаваться публично всем в этом, ...Надеюсь не в мой огород камень?

Конечно если вы постоянно пишите на плюсах, вы таких ляпов делать не будете.
А на VB этот код будет:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim val as Long

Sub func1()
  val = 1

  If val = 1 Then
  Else
    func2
  EndIf
End Sub


И естественно если я месяцами сижу в VB и раз в полгода чего-то пишу-корректирую на C++, то
я могу случайно и про == забыть, и про скобки, и про ;
Ну, компилятор выдаст ошибку или предупреждение, я исправлю.

А писать 1==val, ну как-то некрасиво на мой взгляд.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38492554
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Про вас вообще не шла речь, все кроме одного с вами согласны.
А этого одного закидаем шапками :)
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38492641
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky_Прохожий_Защита от опечатки и лучшая читабельность кода, т.к. сразу видна константа с которой сравнивается выражение. В случае большой длины последнего, это действительно удобнее.
Так может не делать громадных условий, чтобы видеть код целиком?

Вообще это один из самых дурацких пунктов в стилях кодирования, поскольку никакой 100%-й гарантии он не дает, при том что меняет естественный поток кода. А учитывая что написание кода составляет мизерную долю по сравнению с его чтением и эта разница растет со временем жизни проекта, то данное правило только ухудшает код.

Не говоря уже о том, что я например не помню уже когда я в последний раз допускал такую опечатку, как = вместо ==. Несколько лет точно.

Ребята, вы не представляете, на сколько я рад, что вижу здесь единомышленников.
А то надоело маргиналом быть.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38492642
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77
А писать 1==val, ну как-то некрасиво на мой взгляд.

Значит, не в твой огород камень.
...
Рейтинг: 0 / 0
Настройки компилятора...
    #38494178
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА то надоело маргиналом быть.маргиналы пишут 1 == val, мы не из таких )))
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Настройки компилятора...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]