LINUX.ORG.RU
ФорумTalks

Как хорошо на ЛОРе знают C++


0

3

Я понимаю, что C++ не нужен, но тем не менее. Случайно наткнулся на забавное тестирование: http://www.cprogramming.com/cgi-bin/quiz.cgi . 50 вопросов по C++ и не только. У кого какие результаты? У самого 76% По своей невнимательности и из-за склероза завалил все вопросы о том, какие функции каким хидерам стандартной библиотеки соответствуют.

Да, я знаю, что тесты ничего не показывают. Но всё равно забавно.

★★★

Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от melkor217

> Лови, дружок. И читай стандарт.

Дык, я и сказал, что результат не определён. Сам читай.

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

Проверь =)

echo "int main() { int c = 0; return c==c++; }" > 1.c
gcc -Werror -Wall 1.c
1.c: In function ‘main’:
1.c:1:36: error: operation on ‘c’ may be undefined [-Werror=sequence-point]
aho
()
Ответ на: комментарий от Sadler

> Дык, я и сказал, что результат не определён.

И у тебя поворачивается язык назвать конструкцию корректной?

melkor217 ★★★★★
()
Ответ на: комментарий от aho

> -Werror

О, так нагляднее будет нашему зелёному другу.

melkor217 ★★★★★
()
Ответ на: комментарий от Sadler

> Компиляторов много. Попробуй интелёвым, потом расскажешь.

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

aho
()
Ответ на: комментарий от melkor217

> Да при чём тут компиляторы вообще? Мы про стандарт говорим.

Вообще-то мы говорим про язык и про результат операции. Результат будет не определён и точка.

Sadler ★★★
() автор топика
Ответ на: комментарий от aho

> ага, буду я для каждого недоразвитого однострочные примеры собирать разными компиляторами

Дело в том, что это ты недоразвитый, если не можешь прочитать сообщение, выданное тебе компилятором и сравнить с тем, что писал я.

Sadler ★★★
() автор топика

> Your score is 80%. You got 40 answers correct out of a possible 50 questions.

Ой, не ожидал :) Я на С++ уже года четыре как ничего не писал. Думал - забыл всё нафик...

Впрочем, справедливости ради, там много вопросов, в некотором роде «общих» и для С, и для С++. А на Сях практика имеется.

OldFatMan
()
Ответ на: комментарий от Sadler

> Дело в том, что это ты недоразвитый, если не можешь прочитать сообщение, выданное тебе компилятором и сравнить с тем, что писал я.

я знал, что ты тупой, но что настолько... я тебе говорил только про компилятор, попробуй это понять

aho
()
Ответ на: комментарий от Sadler

Я всё это к тому, что конструкция которая не может однозначно интерпретироваться, не может считаться корректной.

melkor217 ★★★★★
()
Ответ на: комментарий от aho

Компилятор выдал всего лишь предупреждение, никто не заставлял тебя юзать флаг, попробуй понять это.

Sadler ★★★
() автор топика
Ответ на: комментарий от melkor217

> Я всё это к тому, что конструкция которая не может однозначно интерпретироваться, не может считаться корректной.

Если код компилируется, значит такая конструкция допустима, пусть и не очень корректна. В тесте ничего не говорилось о подобных случаях.

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

Вот и используй не очень корректные конструкции. А нормальный программист даже не подумает об этом.

melkor217 ★★★★★
()
Ответ на: комментарий от Sadler

> Компилятор выдал всего лишь предупреждение

а ты решил, что «компилятор даст по рукам» - это в прямом смысле?

никто не заставлял тебя юзать флаг, попробуй понять это.

спасибо К.О., без тебя никто бы не догадался ( это был сарказм если что )

aho
()
Ответ на: комментарий от melkor217

> А gcc без флагов это эталонная реализация стандарта или как?

Как и с флагами не эталонная, но какая есть.

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

> Если код компилируется

И всё-таки ещё раз напомню тебе, что компиляторы тут не при чём. Если код компилируется - это ещё ни о чём не говорит. Разработчики компиляторов часто позволяют кодеру всякие «вольности», причём на разных компиляторах разные. Только код, соответствующий стандарту, будет без проблем собираться любым компилятором и на любой платформе.

melkor217 ★★★★★
()
Ответ на: комментарий от Sadler

> какая есть.

Их не один десяток есть. Проще писать по стандарту, чем «как есть» а потом проверять на всех компиляторах. Неужели это настолько неочевидно?

melkor217 ★★★★★
()

У меня вопрос, если C++ не нужен, то какой язык стоит учить, что бы потом можно было куда-нибудь устроиться?

deterok ★★★★★
()
Ответ на: комментарий от deterok

> У меня вопрос, если C++ не нужен, то какой язык стоит учить, что бы потом можно было куда-нибудь устроиться?

C#/Java/Obj-C

aho
()
Ответ на: комментарий от deterok

1С, не иначе. В остальных случаях от задачи зависит.

melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

Просто у меня даже gcc не матерится на это. Мож версия старая.

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

Почему? Вполне корректен. Да, ты не знаешь, когда именно значение будет изменено (внутри скобок). Но это не влияет ни на что.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Слушай дорогой зачем спалил? Вдруг он бы стандарт прочитал (

melkor217 ★★★★★
()
Ответ на: комментарий от Sadler

Если переменная фигурирует в выражении несколько раз, её значение не должно меняться. На пальцах как-то так. Ссылку приводить откровенно лень. Но можешь из интереса на разных компиляторах сравнить значения чего-нибудь в духе

a++ + ++a + a++
melkor217 ★★★★★
()
Ответ на: комментарий от andreyu

> Я так и не понял, какие знания он проверяет.

Телепатию же. Специально для посетителей лора тест.

geekless ★★
()
Ответ на: комментарий от melkor217

Ну как бы изначально мы говорили, как соотносится c и c++. Я доказывал, что зависит от контекста. Вот мы и пришли к неопределённости, зависимости от компиляторов и т.п.

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

> Вот мы и пришли к неопределённости, зависимости от компиляторов и т.п.

Это ты пришёл к неопределённости и компилятором. Вопрос-то вообще не про это.

melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

> Вопрос-то вообще не про это.

А про что вопрос? Может быть, про шаблоны мышления? У вас, я вижу, как раз такой. Надо его рушить. Чем я и занимаюсь этим вечером.

Это ты пришёл к неопределённости и компилятором

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

Sadler ★★★
() автор топика
Ответ на: комментарий от geekless

Угу, тоже удивило. Думал вопрос с подколкой, оказалось просто тупость. Еще не понял объяснение про #49, это о чем вообще? А так, из интересного только getch() и sequence point.

arturpub ★★
()
Ответ на: комментарий от arturpub

> Еще не понял объяснение про #49, это о чем вообще?

Думаю, они хотели сказать, что есть компиляторы, способные устроить практически бесконечный стек вызовов посредством своих внутренних механизмов.

Sadler ★★★
() автор топика

Your score is 84%. You got 42 answers correct out of a possible 50 questions.
Thanks for taking our test!

Где моя печенька? Не знал, что так «хорошо» знаю си++... Короче, тест - лажа.

delete83 ★★
()
Ответ на: комментарий от delete83

Черт! В 41 вопросе прокололся! Не обратил должного внимания на x = new int;

delete83 ★★
()
Ответ на: комментарий от Sadler

> есть компиляторы, способные устроить практически бесконечный стек вызовов посредством своих внутренних механизмов.

s/практически //

man устранение хвостовой рекурсии

geekless ★★
()
Ответ на: комментарий от Sadler

Там главный недочет - это по факту тест по Си. Си++ там разве что совсем чуть-чуть. Именно поэтому у меня и вышла такая высокая оценка.

delete83 ★★
()
Ответ на: комментарий от geekless

Лучше так: s/устроить практически бесконечный стек/практически устроить бесконечный стек/

Sadler ★★★
() автор топика
Ответ на: комментарий от delete83

Ага, то, что тест практически не касается C++, меня тоже смутило.

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

Если перевести на человеческий язык то, что написано в ответах: некоторые компиляторы занимаются лишней оптимизацией, о которой их не просили, и в состоянии развернуть рекурсию в бесконечный цикл. Хотя в нормальном компиляторе должен закончиться стек на каком-то этапе рекурсии.

delete83 ★★
()
Ответ на: комментарий от delete83

Почему эта работа лишняя? Обычно проще написать рекурсивную функцию. Но программист может не учесть того, что при определённом наборе данных закончится стек. Это порождает много ошибок уже на этапе использования программы.

Sadler ★★★
() автор топика
Ответ на: комментарий от Sadler

В моём понимании ++ это всего лишь инкремент переменной. А у тебя сложная муть с компиляторами получилась. Ниок уаще :(

melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

> В моём понимании ++ это всего лишь инкремент переменной. А у тебя сложная муть с компиляторами получилась. Ниок уаще :(

Мне за всё время учёбы после каждого теста приходится подавать апелляцию, на которой долго отстаивать свою позицию. Я свыкся с этим.

Sadler ★★★
() автор топика
Ответ на: комментарий от arturpub

> TCO, да, но quit'а-то все равно не дождешься. Неясно.

Почему? может быть, на миллионном шаге оно таки вывалится из цикла? :)

Sadler ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.