Компилаторщини

36 отговора 0 прегледа
#1

Компилаторщини

if(a>b) return 1;
if(a<b) return -1;
if(a==b) return 0;


Not all control paths return value



Pecunia non olet!
Отговор
в отговор на 3мeй #2

Re: Компилаторщини

Зависи от типа на а и б. Тъпак.

Отговор
в отговор на 3мeй #3

Re: Компилаторщини

безумие

return a - b;

Отговор
в отговор на 3мeй #4

Re: Компилаторщини

Ха ха, ако са позамислиш компилаторът винаги е прав! А това като го видях, първото което ми хрумна е, че е сътворено в МЕИ или поне от негов възпитаник.

Отговор
в отговор на 3мeй #5

А какво ще каже компилатора ако

if(a>b) return 1;
else if(a<b) return -1;
else return 0;

Bеer? Mоre?
Плацебото
Отговор
в отговор на bira_more #6

Re: А какво ще каже компилатора ако

Съгласен, ама кво ша кайш да разкараме елсовете, само цапат?

П.П. ето как би станало на един ред
return a > b ? 1 : a < b ? -1 : 0;

Редактирано от ГHУCEH®ГHOM на

Отговор
в отговор на 3мeй #7

Разбира ви главата...

Компилаторът си е много прав даже.
Излез от тривиалния случай и се замисли какво става ако a и b са споделени променливи между 2 треда и вторият тред ги променя когато му дойде?
Ако са защитени в критична секция може и да си прав.

Отговор
в отговор на 3мeй #8

ти наясно ли си ...

що е това компилатор и има ли той почва у нас?

На него изобщо не му е работа да да разсъждава какви си ги надробил. Той просто трябва да "преведе" твоите писания до нещо разбираемо за процесора. В конретния случай компилатора си казва - ако третия if не се изпълни какво да върна? За тебе може да е очевидно, че това няма как да стане ама ако компилаторът вземе да ги прави тези разсъждения "Hello World!" ще почне да се компилира за 1 ден. Има си други програми, който правят подобни анализи на компилаторът не му е това работата.

Отговор
в отговор на 3мeй #9

Re: Компилаторщини

това е елементарно бе приятел.
направи го със swith или със вложени if else
if(a>b)
{
return 1
}
else
{
if a<b)
{
return -1
}
else
{
if(a==b)
{
return 0
}
}
}

Отговор
в отговор на niksana #10

Re: Компилаторщини

ПС. последния иф е излишен

Отговор
в отговор на 3мeй #11

Re: Компилаторщини

Ми нормално, и правилно

Както се е изказал колега по-горе, при положение че не знаеш типа на променливите не можеш да разчиташ на пълна линейна наредба

представи си че се на Ц++ и съм овърлоаднал операциите < > == да връщат винаги false

Отговор
в отговор на expeler #12

Re: Компилаторщини

Това дето си написал не прави същото като кода с ифовете тъй като резултатът при твоето може да бъде различен от -1, 0 или 1.

Отговор
в отговор на Гypy #13

Re: Компилаторщини

Гуру правилно но по принцип компилаторите знаят типа на данните и биха могли да не генерират съобщение за фундаменталните типове, а те го правят(поне тези с които аз съм работил).

Отговор
в отговор на фъk #14

Re: Компилаторщини

Компилаторите не са Static code analyzers.

Пък и нали компилатора на C е хубав точно защото си се прострелваш в крака без никакви грижи :)
[линк]

Отговор
в отговор на фъk #15

Re: Компилаторщини

Така ли пиле шарено? Ако въпросния тип е double и стойността на a е NaN, a b е 0 кой от if-овете ще зацепи дипломиран селски пъдарино?

Отговор
в отговор на Tweeg #16

Re: Компилаторщини

Аз като почна и 2 часа мога да псувам static code analajazari, мама им проста на някои дето е грешка на природата, че са се родили във време дето компютрите са били измислени.

Отговор
в отговор на ГHУCEH®ГHOM #17

Re: А какво ще каже компилатора ако

[code]
return a > b ? 1 : a < b ? -1 : 0;
[/code]
Взе ми го от устата (от клавиатурата, де!)

Отговор
в отговор на Лaмя #18

Re: Разбира ви главата...

Точно щях да викна, че ако са в два или повече треда, къде са му мутексите, ама видях, че си написал за критичната секция...

Отговор
в отговор на Пeтъp Пeтpoв #19

Re: Компилаторщини

Tака, бай-дъ-уей, как мога да сложа НаН в дабъл, в Ц или Ц++?

General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
Отговор
в отговор на фъk #20

Re: Компилаторщини

Верно ли вааа, бах па язе си мислех, че е същото. А ние о нашия квартал дините с корите ги ядеме да знаеш.

Функцията не връща bool а най-малкото signed char. Е да този който ползва функцията, ако и той е кретен и проверява за "== -1", както и автора на функцията, който държи да върне -1. Ша стане кофти. Но идеята е да върнеш три вариянта да документираш какво ще значи водещия бит на върнатото и гутоу. ако а и б са инт а връщаш лонг и проблем с препълването няма да имаш и пак гутоу ... ама кво значение има ... дано да не попадам на твоите писаници.

Отговор