Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Фрагменти от С-то....
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8943
Страница 1 от 5

Автор:  relsys [ Вто Юни 14, 2011 11:29 am ]
Заглавие:  Фрагменти от С-то....

Та.....

Пиша си аз миналата седмица поредната функция от проекта. И ми трябва да нулирам една променлива. Обаче, вместо:

Код:
variable = 0;


съм цъкнал два пъти на '=' и съм написал:

Код:
variable == 0;


Съответно последва 2 часа чесане по главата и тнт. От компилатора ни вопъл, ни стон. Нито Error, нито Warning.

Според мен, това си е ситуация за Error, щото си е грешка от всякъде. Ама и на Warning бих се зарадвал. Пищи за всякакви други глупости дето няма смисъл, пък очевадните неща ги пропуска. Някой има ли идея що така, или "е така по стандарт". За IAR иде реч.

Автор:  Nikola Kirov [ Вто Юни 14, 2011 11:39 am ]
Заглавие: 

Дава си Warning.
Само че ако си компилирал веднъж ти дава Warning. Ако нищо не пипнеш по файла в който е съответния фрагмент и пак компилираш няма да ти даде. Затова ако искаш да видиш в целия проект всички Warnings то даващ да рекомпилира всичко и ще ги получиш.

Автор:  bobyper [ Вто Юни 14, 2011 11:40 am ]
Заглавие: 

В такъв случай някои компилатори дават

Warninig: Code has no effect

Автор:  relsys [ Вто Юни 14, 2011 12:06 pm ]
Заглавие: 

Тъй де, тествах го сега пак и го видях, че дава Warning когато си иска.
Няма ли начин да го накарам да ми дава Error?

Автор:  miro_atc [ Вто Юни 14, 2011 12:17 pm ]
Заглавие: 

Nikola Kirov написа:
Ако нищо не пипнеш по файла в който е съответния фрагмент и пак компилираш няма да ти даде.


Има разлика между компилация на проект и файл. По принцип ние му викаме "компилиране", но на практика проектът се прави ("мейква"). Компилират се само сорс файлове.

Грешките от компилатора се появяват при всяка компилация. При повторно мейкване може да се спести компилацията на определени файлове, ако по тях и всички файлове от които зависят няма промени.

Автор:  Цецо [ Пон Юни 20, 2011 12:36 pm ]
Заглавие: 

relsys написа:
Тъй де, тествах го сега пак и го видях, че дава Warning когато си иска.
Няма ли начин да го накарам да ми дава Error?


Миро ти е обяснил защо дава Warning "когато си иска".

А дали може да ти дава Error за подобно нещо, трябва да преровиш документацията на съответния компилатор и ако може да активираш въпросния error level. Но според мен Warning за подобни неща е достатъчен, синтактичния запис си е съвсем в правилата на ANSI C, затова не го класифицира като грешка. Друг е въпроса, че няма да работи както ти очакваш. Затова и политиката е да се дава Warning.

Автор:  relsys [ Пон Юни 20, 2011 2:08 pm ]
Заглавие: 

Цецо написа:
relsys написа:
Тъй де, тествах го сега пак и го видях, че дава Warning когато си иска.
Няма ли начин да го накарам да ми дава Error?


Миро ти е обяснил защо дава Warning "когато си иска".

А дали може да ти дава Error за подобно нещо, трябва да преровиш документацията на съответния компилатор и ако може да активираш въпросния error level. Но според мен Warning за подобни неща е достатъчен, синтактичния запис си е съвсем в правилата на ANSI C, затова не го класифицира като грешка. Друг е въпроса, че няма да работи както ти очакваш. Затова и политиката е да се дава Warning.


Да, те нещата са си сбъркани на ниво стандарт още....

Автор:  MYXATA [ Пон Юни 20, 2011 3:10 pm ]
Заглавие: 

Kак пък хората от 30 и кусур години ползват този език, пък ти сега в момент на проблясък(или илюминиране по новому)
реши че е сбъркано още на ниво стандарт :?:
това че си го написал грешно не те оправдава със постановката сбъркан стандарт....
Ако вместо да се стремим да пишем с по-малко грешки , обвиняваме други....
работата отива на:
...инж. Ганев от отбора на ТНТМ получил главен приз за реализирана поредица от различни по дължина къси съединения :)
същия отбор с космическия апарат дет, само вратата му заяжда и не се отваря иначе всичко му е наред...

Автор:  relsys [ Пон Юни 20, 2011 3:35 pm ]
Заглавие: 

MYXATA написа:
....


Така е, Мухата, ама няма друг език, който да ти позволи да пишеш глупости и въпреки това да ти генерира там какъвто изходен формат му е зададен.
Това си е синтактична грешка, и точно на компилатора му е работата да я хване и да спре дотам и също така да ти минимизира възможността от допускане на такива. Колкото повече ограничения - толкова по-добре.

Автор:  Dimitar [ Пон Юни 20, 2011 3:53 pm ]
Заглавие: 

Цитат:
ама няма друг език

На колко точно езика можеш да програмираш като хората :? ?

Автор:  woody [ Пон Юни 20, 2011 4:37 pm ]
Заглавие: 

MYXATA написа:
...инж. Ганев от отбора на ТНТМ получил главен приз за реализирана поредица от различни по дължина къси съединения :)

И класиката - инж. Маринов спечелил международното състезание за най-късо съединение.

Автор:  MYXATA [ Пон Юни 20, 2011 4:40 pm ]
Заглавие: 

Woody,
сега зачетох алманаха на ТНТМ-то :)
мисля че приза на инж.Маринов беше за най-дълго късо съединение :lol: но може би греша :)

Автор:  relsys [ Пон Юни 20, 2011 5:10 pm ]
Заглавие: 

Dimitar написа:
Цитат:
ама няма друг език

На колко точно езика можеш да програмираш като хората :? ?


Аз да програмирам мога. Ама като "хората" само на С....

Автор:  traqn_savov [ Пон Юни 20, 2011 8:04 pm ]
Заглавие: 

Не че искам да ви се меся...

Ама variable == 0; това си е напълно законен и разбираем за C синтаксис, за това си нямал лорнинги..

Ако в условни скоби с някакъв условен оператор if, while (variable = 0) направиш туй ще получиш лорнинг "присвояване на стойност в условен блок" да ама кода ще се компилира..

Синтактичните грешки се оправят за минути, ама логическите отнемат години.. :lol: :lol: :lol:

Автор:  tolstolob [ Пон Юни 20, 2011 8:27 pm ]
Заглавие: 

Затова: константите отляво. Пропуснеш ли едното '=' -> тряс! и спестяваш следващите 2 часа.
Отначало ми изглеждаше извратено, но после се оказа доста удобно. Особено в случая:
Код:
if (OK == FunctionWithManyParameters(param1, param2, ... paramN))
{
    // Do something
}


За мен така е 100 пъти по-четливо.

Страница 1 от 5 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/