|
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | (покажи всички)
Тема
|
Това в Java няма да мине, но в C++ ...
|
|
Автор |
виk (направо крясък) |
Публикувано | 25.12.05 10:48 |
|
for(int i; i<NUMBER_OF_COMPANIES; i++)
{
//Do something here ...
}
| |
Тема
|
Ега па не мине
[re: виk]
|
|
Автор |
Colombino (работен) |
Публикувано | 25.12.05 12:48 |
|
Всеки уважаващ себе си компилатор ще ти каже, че не си инициализирал променливата, а ти ако си програмист и не се безпокоиш от предупрежденията никой не може да ти помогне.
warning C4700: local variable 'i' used without having been initialized
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
|
щом е само предупреждение. макар че аз това предупреждение го боря направо за грешка...
NE SUTOR ULTRA CREPIDAM
| |
|
Т.е. имам предвид, че не е логическа грешка, останала незабелязана от компилатора.
Хубавото на C++ му е, че можеш да правиш всичко ако си убеден, че така искаш. Компилаторът ти казва, че не си инициализирал, ма ти може баш тва да искаш ...
Ето един пример (задача от държавен изпит във ФМИ) в който го искаш:
1) {1 т.} Даден е следният фрагмент от програма на езика C:
int x, y, z;
z = ( x = - y) ? ( - x / y) : y ;
Кой от следните оператори е еквивалентен на горния оператор за присвояване?
a) z = ( x = - y) ;
b) z = ( - x / y ) ;
c) z = y ;
d) z = !! ( x = - y);
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_Редактирано от Colombino на 25.12.05 14:00.
| |
|
Много хитър начин са намерили да дадат правилния отговор. Макар че другите три веднага могат да бъдат отхвърлени по следните съображения:
а) - това е условието на аритметичния if, така че няма как да бъде резултата
б) - неизпълнимо, защото преди това има присвояване x = -y, така че в тоя фрагмент на if-a, стойностите са вече ( - (-y) / y )
в) - неизпълнимо, понеже неинициализираните int са 0xCCCCCCCC, т.е. не са нули, съответно присвояването в условието на if-а е ненулево, така че не се достига до false-клаузата
Дай други задачки от тоя изпит.
... И всякоя възраст, класа, пол, занятье зимаше участье в това предприятье ...
| |
|
8-цата на Visual Studio-то дава runtime check failure - употреба на неинициализирани / недефинирани променливи.
... И всякоя възраст, класа, пол, занятье зимаше участье в това предприятье ...
| |
|
Аз що си мисля, че употребата на неинициализирани неща е недефинирано => тия дето са я измислили тая задача може да го поемат анално.
Ай весела Коледа и стига с тоя клуб 
Машина за отделяне на кожа и сланина от парени свине
| |
|
понеже неинициализираните int са 0xCCCCCCCC, т
Глей ся, някои хора работят с други компилатори, а не с VS.... и не в debug...
Е - една бивша колежка фикснала така един бъг, щото гърмяло:
if (neshtosi == 0xCCCCCCCC) return false;
Машина за отделяне на кожа и сланина от парени свине
| |
|
Добре де, не е важно дали ще е точно 0хСССССССС или нещо друго, важното е, че няма да е нула.
... И всякоя възраст, класа, пол, занятье зимаше участье в това предприятье ...
| |
|
Изброй компилатор, а аз ще ги пробвам?
Тези редове се появиха в Dev-C++, който не даде warning. Дава предупреждения, когато не използвам някоя променлива, но цитираните редове преминаха без абсолютно никаква нотка на тревога.
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | (покажи всички)
|
|
|