Это что? О каком именно конструкторе речь?
Речь о конструкторе который вызывается при создании объекта.
какого объекта?
Где он тут?
#include <stdio.h>
int sum(int a, int b) {
return a + b;
}
int main()
{
int a;
printf("Enter a number: ");
scanf("%d", &a);
printf("%d", sum(a, a));
return 0;
}
Так в этом коде ты пытаешься прочесть ячейку памяти в которую еще ни чего не записал. объект не создан. Где конструктор?
P. S.
Точнее, был создан объект. Но в него ни чего не положили. Но попытались вернуть результат.
Что за бред? В Си без плюсов вообще объектов/конструкторов нет, и как-то же работают программы, и большинство программ на Си скомпилируются/будут работать и в С++ )
Так почему бред? Собери код что выше. Какой тебе вернется результат?
Дык это ж почти хеллоуворлд из любого учебника в главе про функции.
Ладно тебе холло ворд.
ответ на вопрос первого поста я уже дал.
Если кто обосновательно переубедит, буду рад выслушать мнения…
P. S.
Не удержался.
во твоем коде это что:
scanf("%d", &a);
Это и есть конструктор функции. Без этого конструктора что вернет функция?
Это вызов функции.
Зачем называть это конструктором?) Нигде такого не слышал, и даже гугл не знает.
Гугл много чего не знает о реальных возможностях Си и плюсов.
Если нужно включить в код функцию без конструктора, например для вызова из другого приложения. Нужен пустой конструктор, иначе будет игнор компилятором.
P. S.
У автора темы стандартный вопрос из тестов на знание возможностей Си и плюсов.
Да даже Страуструп и Ритчи вряд ли называет/называл вызов функции словом “конструктор”.
Зачем так делать?
Вызов функции это вызов функции.
Конструктор это такая штука в языках с классами, которая вызывается при создании экземпляра класса.
Так программы обычно вызывают функции из библиотек, а не из других программ. В библиотеках нет такой проблемы, + есть атрибуты типа dllexport
и т.д., никакой нормальный компилятор не удалит функции предоставляемые библиотекой )
Вот как раз Страуструп или Прата описывали этот момент.
В Си нет возможности объявить функцию без конструктора.
Эта фича появилась в плюсах. В каком именно стандарте врать не стану, не помню. Не акцентировал на этом внимание и если честно на практике ни разу применять не приходилось.
Но фича такая в плюсах есть.
В смысле? А как тогда кучу библиотек на Си создают уже много десятков лет?
И я не про возможности говорил, а про то, что никто не называет вызов функции конструктором.
Библиотеки сишные здесь как фигурируют?
А я о вопросе ТС …
Что значит “в Си нет возможности объявить функцию без конструктора”?
Дык и препод ТС наверняка сильно удивится если ТС начнет называть вызовы функций конструкторами ))
Так не вызов функции конструктор. Сама функция должна иметь внутри тела конструктор. А если есть необходимость создать функцию без конструктора, то плюсы такое позволяют. Я об этом.
И препод. такой вопрос не задаст, это больше похоже на тест перед собесом на вакансию …
Это как?
Теперь я совсем не понимаю о чем речь.
Нужен пример кода, с указанием где именно в нем конструктор )
Ок.
Подниму архивы своего обучения, приведу пример. Не сейчас.
Немного иными задачами занят. Слов на ветер не бросаю.
P. S.
Повторюсь, преподы в универах таких тонкостей знания языка не спрашивают. Это только на собесе могут спросить.
Речь про ООП-шные методы что ли? Так и там есть функции-члены класса, а не объекта.
Или про особенности войны с оптимизатором в компиляторе?)
Только вопрос в тесте про обычный void.
Это не возвращаемое функцией значение, а побочный эффект.
Вот и я об этом.
Оптимизатор это вообще стоит вынести в отдельную тему. Особенно когда даже разработчик компилятора не способен дать детальный и конкретный фидбэк по оптимизации ))