Я жду комментария модераторов. Зачем вам отвечать, если суть ваших комментариев не искать истину, а поставить автору низкую оценку. Вы не поставили не одной позитивной оценки, или я ошибаюсь?
Если вы не знаете стандартов языка, то о какой оценке навыков программирования может идти речь? и Потому что вы пренебрежительно относитесь к изучению языка, на примере которого рассуждаете об оценке навыков программирования. — Это ваше личное высказывание, которое нарушает требование данного ресурса: оскорблять других пользователей, не следить за эмоциями.
Далее
Угу, там же, раздел 5.1.2.2.3, Program termination (всего лишь на страницу ниже вашей цитаты):
reaching the } that terminates the main function returns a value of 0.
Также нарушает правила: Путать «Хабр» с Твиттером. Если я не прав, то я не так понимаю данные правила. Пусть тогда мне пояснят их пользователи с большими полномочиями. От вас я вижу много неконструктивной критики, с переходом на личности.
Не понимаю, почему столько минусов? Вполне честный ответ… Если кто-то говорит, что знает стандарты языка С полностью… Конечно, к этому надо стремиться. Если есть в чем-то сомнения, проще открыть стандарт и уточнить спорный момент. Вот несколько фактов:
1. Официальные издания стандартов языка С публикуется ISO, и стоят денег.
2. Существуют следующие международные стандарты (ISO):
2.1 C90, определен в ISO/IEC 9899:1990.
2.2 C99, определен в ISO/IEC 9899:1999.
2.3 C11, определен в ISO/IEC 9899:2011.
Объемы стандартов близки к 1’000 страниц английского текста.
По поводу функции main:
1. C11, ISO/IEC 9899:2011. (Черновик здесь http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf):
The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
int main(void) { /*… */ }
or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /*...*/ }
or equivalent; or in some other implementation-defined manner.
«UNIX прост. Но надо быть гением, чтобы понять его простоту.» — Деннис Ритчи.
Господа, появилось много отрицательных комментариев — видно многих очень сильно задело то, что кто-то учит их писать Hello world. Это не являлось целью статьи, так что извиняйте (видно все используют принцип KISS). Однако появилась новая пища для размышлений (как минимум для меня) — это https://habrahabr.ru/post/75971/ и http://www.gnu.org/software/hello/. Так что, если есть желание поддержать автора в его начинаниях (у многих ярых комментаторов 0 статей) подумайте еще раз над своей оценкой статьи и ее значении для вас и для автора. А конструктивная критика всегда приветствуется и будет учтена в последующей работе.
Вот из Википедии:
Давайте изменим традиционные приоритеты в создании программ: вместо представления о нашей задаче как о создании инструкций «Что делать?» для компьютера сконцентрируемся на объяснении другим людям описаний нашего видения того, что под управлением программы должен делать компьютер.
Повторю — программа без комментариев ничего не стоит. Это законченное утверждение. Как аксиома в геометрии — параллельные прямые не пересекаются. Не я его придумал — вот где это упоминается — Ален И. Голуб: Правила программирования на C и C++ — раздел 20. Если не согласны — это ваше личное мнение, не надо навязывать его другим. Писать или не писать комментарии — скажете это авторам сложного фрагмента кода, который нужно модифицировать вчера. Я считаю что писать комментарий нужно, просто этому не учат у университетах.
Не согласен — важен не только факт понимания программы, но и время, потраченное на это. Комментарий можно рассматривать как средство борьбы со сложностью программы.
Компилятор пишут люди, а они могут ошибаться… Это не спор о стандартах, и не о моем уровне их знания. Я лишь говорю о том, что даже простейшая программа (даже, наверное, самая простая) не так проста (что, кстати, данная дискуссия и показывает). И данный факт можно использовать для оценки навыков программирования автора данной программы.
Программа пишется один раз, а модифицируется много… Если предполагается развитие программы, то лучше писать безопасно, тем более, зная о явных проблемах printf. Это как с заземлением — может убить и при его наличии, не без него убьет точно.
Моя оценка по вашему коду:
1. есть проблемы с комментированием и документированием: программа без комментария ничего не стоит, а ваша программа без комментариев.
2. есть доверие компилятору разрешать много делать по умолчанию: любая процедура (функция) возвращает результат в регистре еаx (x86), здесь компилятор это делает за вас (если делает, то добавляет следующий ассемблерный код — xor eax, eax).
3. на любое ваши замечание могу на спор придумать в 5-ть раз больше замечаний.
А вообще ваш вариант вполне себе хорош.
Я — не знаю стандартов Си и не знаю человека, который их (полностью) знает… Стандарт может завтра поменяться, но архитектура CPU вряд ли завтра поменяется, а программа должна работать…
Я — доверяю. А остальное это как if ( 5 == a ) или if ( a == 5 ) — каждый сам выбирает как писать, но не каждый обьяснит, почему он сделал такой выбор.
Не совсем: printf( «Hello, world!» ) так же безопасен как int s = 2; int b = 4/s. Смотрите на мою статью как на взгляд на то, имеет ли смысл ожидать зеленого сигнала светофора если машин не видно, или не дожидаясь перейти на красный? Опыт желательно строить на ошибках других, не я один утверждаю что надо стремится к красивому (безопасному) коду.
Добрый день. Получается, вы немного "доработали" openSCADA - а эти изменения где можно глянуть?
Далее
Угу, там же, раздел 5.1.2.2.3, Program termination (всего лишь на страницу ниже вашей цитаты):
reaching the } that terminates the main function returns a value of 0.
Также нарушает правила: Путать «Хабр» с Твиттером. Если я не прав, то я не так понимаю данные правила. Пусть тогда мне пояснят их пользователи с большими полномочиями. От вас я вижу много неконструктивной критики, с переходом на личности.
1. Официальные издания стандартов языка С публикуется ISO, и стоят денег.
2. Существуют следующие международные стандарты (ISO):
2.1 C90, определен в ISO/IEC 9899:1990.
2.2 C99, определен в ISO/IEC 9899:1999.
2.3 C11, определен в ISO/IEC 9899:2011.
Объемы стандартов близки к 1’000 страниц английского текста.
По поводу функции main:
1. C11, ISO/IEC 9899:2011. (Черновик здесь http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf):
The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
int main(void) { /*… */ }
or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /*...*/ }
or equivalent; or in some other implementation-defined manner.
«UNIX прост. Но надо быть гением, чтобы понять его простоту.» — Деннис Ритчи.
Давайте изменим традиционные приоритеты в создании программ: вместо представления о нашей задаче как о создании инструкций «Что делать?» для компьютера сконцентрируемся на объяснении другим людям описаний нашего видения того, что под управлением программы должен делать компьютер.
— Дональд Кнут, http://community.livejournal.com/ru_perl/249441.html
#include <stdio.h>
int main()
{
int flags = 0x5; // Некий набор флагов.
printf ("-parity\n" + ((flags & 0x1) != 0));
printf ("-break\n" + ((flags & 0x2) != 0));
printf ("-xon\n" + ((flags & 0x4) != 0));
printf ("-rts\n" + ((flags & 0x8) != 0));
return (0);
}
1. есть проблемы с комментированием и документированием: программа без комментария ничего не стоит, а ваша программа без комментариев.
2. есть доверие компилятору разрешать много делать по умолчанию: любая процедура (функция) возвращает результат в регистре еаx (x86), здесь компилятор это делает за вас (если делает, то добавляет следующий ассемблерный код — xor eax, eax).
3. на любое ваши замечание могу на спор придумать в 5-ть раз больше замечаний.
А вообще ваш вариант вполне себе хорош.