|
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | (покажи всички)
Тема
|
Неяснота относно с/с++
|
|
Автор |
Matrix_N (Just a human) |
Публикувано | 25.01.05 14:30 |
|
Здравейте, някой може ли да ми обясни защо от следния фрагмент i се увеличава с 1 ?
int i = 3;
while (i+=5<15) {
cout<<i << "\n";
}
вярно че < е с по - голям приоритет, но откаде идва това добавяне на +1 ?
тествах го кода на vc6 както и на gcc 3.3.4 и се същата работа.
ПП: Това е взето от тест
Редактирано от Matrix_N на 25.01.05 14:31.
| |
|
Щото се изпълнява като:
-----------------
int i = 3;
while (i+=(5<15)) {
cout<<i << "\n";
}
---------------------------
5<15 е true.
И i се увеличава с 1.
Впрочем, дали по стандарт е така - true boolean expression се интерпретира винаги като 1 в аритметични изрази - не знам.
| |
|
Резултатът от логически изрази по стандарт и в C и в C++ е 0 за лъжа и 1 за истина. Разликата е, че в C++ тва е bool, а в C е int.
Който идиот е измислил компилаторът да не дава warning при събиране на int с bool, приемайки bool имплицитно като целочислен тип с по-малък размер от int ( а именно приемащ 0 и 1 ), заслужава да му откъснат чурката.
Тва е идиотски въпрос за тест. Не знам кво са питали, ма програмистът не разчита на приоритети а слага скоби.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
Тема
|
Re: Неяснота относно с/с++
[re: Matrix_N]
|
|
Автор |
Questor (работник) |
Публикувано | 25.01.05 15:25 |
|
Мда тоя дето го е дал тоя въпрос на тест пък заслужава да му откъснат чурката и да му я наврат отзад
Сигнатура!
| |
|
На времето кви въпроси имашеее ....
Като учех доброволен курс C в даскалото бях май единствен от нашата група. Останалият народ ходеше на графи - далеч по-лесни бяха.
Та там такива задачи за нищо ги нямахме. Не е ли да не се събира на един ред с инкрементация, декрементация, тайпкаст и мазане през пойнтер в некъв известен стринг ... се едно нищо не е. Тва е детска игра в сравнение с онова. Ма станхме мъже! ИП, така да се каже.
А тез младежи сега ако им дадеш такъв израз 5 минути ша дават заето и на края ша те питат тва на къв език за програмиране е.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
|
void main()
{
int k = 0;
int j = k++ + ++k;
..............
}
Колко е j и колко е k?:)
| |
|
Ттой оня ненормалник Ачо кучето от ТУ дето вече се споменаваше тука (не мога да разбера кво му се възхищават някои колеги - неговите лекции се състояха от рисуване на дъската на такива синтактични диаграми с елипси и стрелки едновременно на Ада, Модула2 и С),
та искаше да знаем таблицата с приоритетите наизуст...
Сигнатура!
| |
|
приемайки bool имплицитно като целочислен тип с по-малък размер от int
Ами реално е така, поне за М$ компилатора.
In Visual C++ 5.0 and later, bool is implemented as a built-in type with a size of 1 byte.
| |
|
Относно тия тестове... От една страна е задължително да се знаят основите на философията на Ц, но пък от друга, ако видя някой мой подчинен да пише такива бози, направо ще му строша клавиатурата в главата.
| |
|
Нещата които ни караха да решаваме работеха еднакво на всички компилатори.
Тоя израз специално са ни учили, че различните компилатори го правят различно. Ама аз смятам, че всеки уважаващ себе си компилатор трябва да докара
k = 2
j = 1
За съжаление не всики компилатори се справят с тая задача успешно. VS 7 също. Това е още една причина да се забрани постфиксната инк/дек при класовете - там няма да постигнеш никога тоя ефект.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | (покажи всички)
|
|
|