Можно ли скрыть предупреждения компилятора?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
pivalexander
299
pivalexander  
   string st = "";
   int i = 1;
   
   st = "text" + i;
   
   st = "text" + (string)i;


Предупреждение на строке st = "text" + i;  ну оно и понятно

В примере все просто, но в реальных проектах строки собираются гораздо сложней и раздувать строку в два, а то и три раза больше по размеру из-за указания везде преобразования int в string, совсем не хочется.

Я понимаю с другими типами данных, но с int он и в африке инт, когда вываливается таких 600 штук и что бы найти сообщение об ошибке, надо прокручивать этот список постоянно, достает.

А втыкать везде (string), IntegerToString(), хуже код читается

Как то можно этим предупреждения отключить?

StringConcatenate() не удобно использовать

pivalexander
299
pivalexander  
Может через перегрузку операций можно избавиться, не разу не делал это, вроде оно только для объектов и структур возможно работает
Alexandr Gavrilin
41594
Alexandr Gavrilin  

А чего бы правильно это не написать и все ок будет :-)

Сделать например через StringFormat ? 

ну ли макросы сделать короткие для той же IntegerToString ? 

что мешает сделать, что то типо 

#define itos(x) IntegerToString(x) 


А вообще когда однотипных данных с ошибками много хорошо выручает Ctrl+H

pivalexander
299
pivalexander  
Alexandr Gavrilin:

А вообще когда однотипных данных с ошибками много хорошо выручает Ctrl+H

Не, не поможет, названия везде разные


Alexandr Gavrilin:

#define itos(x) IntegerToString(x) 

За это спасибо, не знал, я бы только так сделал

string itos(int x)
{
   return IntegerToString(x);
}

Теперь сделал так

#define is(x) IntegerToString(x) 
#define s string

st = "text" + is(i);
st = "text" + (s)i;
Alexey Volchanskiy
27264
Alexey Volchanskiy  
Код с варнингами  - плохой код. Когда работал программистом, нас за выкладывание такого кода на сервер лишали премии. Потому что варнинги часто сигнализируют о скрытой ошибке. И я в этом многократно убеждался.
Alexey Navoykov
4570
Alexey Navoykov  
Alexey Volchanskiy:
Код с варнингами  - плохой код. Когда работал программистом, нас за выкладывание такого кода на сервер лишали премии. Потому что варнинги часто сигнализируют о скрытой ошибке. И я в этом многократно убеждался.
Варнинг варнингу рознь.  В рассматриваемой ситуации необходимость варнинга довольно спорна.  К примеру C#, известный своей педантичной строгостью, не выдаёт никаких варнингов в данном случае.
Georgiy Merts
9181
Georgiy Merts  
Alexey Volchanskiy:
Код с варнингами  - плохой код. Когда работал программистом, нас за выкладывание такого кода на сервер лишали премии. Потому что варнинги часто сигнализируют о скрытой ошибке. И я в этом многократно убеждался.

Правильно делали.

Код должен компилироваться без единого варнинга. 

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

Меня удивляет народ, который мало того, что выключает директиву strict, так еще и не обращает внимания на варнинги.

Georgiy Merts
9181
Georgiy Merts  
Alexey Navoykov:
Варнинг варнингу рознь.  В рассматриваемой ситуации необходимость варнинга довольно спорна.  К примеру C#, известный своей педантичной строгостью, не выдаёт никаких варнингов в данном случае.

Ну и, по-моему, это плохо.  Совершенно ясно, что требуется перевод числовых данных в строковые, соответственно, в тексте программы такой код должен быть. А если его нет - должно быть предупреждение.

pivalexander
299
pivalexander  
Georgiy Merts:

Ну и, по-моему, это плохо.  Совершенно ясно, что требуется перевод числовых данных в строковые, соответственно, в тексте программы такой код должен быть. А если его нет - должно быть предупреждение.

Что плохого? Ну предупредил он меня и что от этого изменится, компилятор же сам преобразовал в стринг и предупредил (неявное преобразование из «числа» в «строку»), я на это и рассчитывал, что он его сам преобразует, зачем мне дополнительный код писать для этого

И если это плохо, что будет если я сам тип инт в стринг не переведу? 

Можно также варнингами журнал засыпать, что вы не указали не обязательные параметры в функции, надо все указывать а то мало ли чего! :) ни чего не будет, но это плохо!

Alexey Navoykov
4570
Alexey Navoykov  
Georgiy Merts:

Ну и, по-моему, это плохо.  Совершенно ясно, что требуется перевод числовых данных в строковые, соответственно, в тексте программы такой код должен быть. А если его нет - должно быть предупреждение.

Смысл предупреждений в том, чтобы сигнализировать о потенциальной ошибке.  В чём же здесь потенциальная ошибка?  Если бы человек вместо конкатенации строк хотел просуммировать два числа, то результат выражения тоже бы присваивался числовой переменной, а не строковой.  Но у него стринг.  Выходит что он и тут ошибся?  Т.е. компилятор его предупреждает о том, что он вероятно ДВАЖДЫ мог ошибиться?  Не кажется ли это чрезмерным?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий