собственно сам код:
#include <stdio.h>
typedef struct mystr {
int a;
int b;
int try;
} mystr;
int main(int argc, char **argv)
{
printf ("%d\n", argc);
if (argc>0) main(argc-1, argv);
return 0;
}
Примечание:
Этот код ни в одном компиляторе C++ не соберётся. Никогда. Даже синтаксический анализатор не пройдёт.
Подсказка: Это вопрос на знание стандартов С и С++
Примечание:
Забыл закрыть этот вопрос ^_^
И так разгадка загадки:
> #include <stdio.h>
Так нельзя писать, т.к. С кодирует только имя функции, а C++ -- имя функции и типы её аргументов. Для А заголовки в stdio.h записаны для C-библиотек. В результате С++ компилятор не сможет найти нужных библиотек.
Конечно, можно извращаться с extern "C", но это неправильно.
Правильно строка должна писаться так:
#include <сstdio>
Т.е. в начале добавляется "c" и удаляется расширение в конце.
Большинство стандартных библиотек умеет работать как с С, так и с С++ как раз именно из-за фокуса с extern "C" и __cplusplus. Но они не обязаны этого делать.
> int try;
Ну, это всё увидели. Да, действительно тут использовано ключевое слово "try" языка C++, но не языка C, в котором такого ключевого слова нет. Это был вопрос на знание , что ключевых слов в C++ больше, чем C.
> if (argc>0) main(argc-1, argv);
Большинству компилятором вообще-то на это насрать, но по стандарту C++ функция main не должна никогда вызываться. А вот стандарт C этого не запрещает и микроконтроллер тут не причём.
И немного обсудим неверные ответы:
Рекурсия стандартом С++ не запрещена, а если компилятор на неё ругает, то это проблемы компилятора.
typedef везде одинаковый. Видимо John Freeman имел ввиду разницу в приведении типов, но это отдельная тема.
Итак результаты: 2 из 3 правильных ответа дал конструктор. Соответственно победа за ним.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.