Jsx707
Дак С++ позволяет. Зачем так делать то ?)
А вот чтоб быть не таким как фсе
Andrii
Ну вот как оказалось .h не обязателен , C++ позволяет и обычные файлы подключать😂
Это не подключение, это просто включение текста, считай скопипастить содержимое указанного файла в текущий. #include "pornhub.com" тоже заработает, если есть файл pornhub.com
Алексей
И это заработает
А такое? Переменные или функции из срр мы можем использовать в других файлах?
Jsx707
Проверьте😂
Igor
Он позволяет не потому что так нужно делать, а потому что это Си нужна возможность выстрелить в ногу :) препроцессору пофиг что подключать
Алексей
Andrii
А такое? Переменные или функции из срр мы можем использовать в других файлах?
Там есть понятие «единица трансляции». Если переменная/функция не static то в общем-то мы можем её использоват в других единицах трансляци
Igor
что значит выстрелить в ногу
юмор:) идея в том что си это не язык для новичков где за каждым твоим шагом следят. Мы дали возможность препроцессором включить в код любой другой файл,а что ты будешь с этим делать твои проблемы
Vladislav
Порушить прогу
тьфу, я так хоть на HTML смогу)
Алексей
Там есть понятие «единица трансляции». Если переменная/функция не static то в общем-то мы можем её использоват в других единицах трансляци
Значки и без хеддера не обойтись)) а главное подключать ашку с 2-4 функциями или подключать срр со всей реализацией всех функций
Борисов
Там есть понятие «единица трансляции». Если переменная/функция не static то в общем-то мы можем её использоват в других единицах трансляци
Там ещё момент (насколько помню), что если нет прототипа функции, то функция будет считаться как int foo(...) Будет warning и, возможно, ошибки, если функция возвращает что-либо, что больше int
Andrii
Значки и без хеддера не обойтись)) а главное подключать ашку с 2-4 функциями или подключать срр со всей реализацией всех функций
Ну в общем-то никто не мешает мне написать int printf(const char * fmt, ...); int main(int argc) { printf("num: %d\n", argc); return 0; }
Vladislav
а вот как метод printf() принимает n-ое колличество элементов?
Алексей
Ну в общем-то никто не мешает мне написать int printf(const char * fmt, ...); int main(int argc) { printf("num: %d\n", argc); return 0; }
Имеется ввиду что написать прототипы и не писать реализацию? Или ты что-то другое имел ввиду?
ALEX
Сидит программист в баре, пьет пиво. К нему подходит девица: — Если хочешь хорошо отдохнуть сегодня, то меня зовут Бетти... — А если я не хочу сегодня хорошо отдохнуть, то как тебя зовут?
Andrii
Там ещё момент (насколько помню), что если нет прототипа функции, то функция будет считаться как int foo(...) Будет warning и, возможно, ошибки, если функция возвращает что-либо, что больше int
Не int foo(...), а просто int foo(). В Си, если функция не принимает аргументов, и ты хочешь сказать именно это, надо int foo(void), а int foo() функция, которая принимает любое число аргументов
Andrii
а вот как метод printf() принимает n-ое колличество элементов?
Есть макросы из stdarg.h. Идея состоит в том, что тот, кто вызывает функцию, тот и очищает переданные параметры из стека по стандарту вызова. Поэтому можно передавать любое число аргументов. Но число аргументов не передаётся.
Andrii
А функция может просто брать параметры из стека, пока сочтёт нужным
Vladislav
как все магик
Andrii
Если функция передала меньше аргументов, то будет мусор
Igor
ну так как
https://www.youtube.com/watch?v=4lnr8THgL5k
Andrii
Честно говоря понятно не до конца
Если я объявлю функция int foo() то я могу вызывать foo(1), foo("test", 1, 2, 3) и т. п. А если я объявлю функцию foo(void) то будут ошибки
Andrii
Честно говоря понятно не до конца
#include <stdio.h> int foo() { return 42; } int main(int argc) { printf("num: %d\n", foo("test", 1, 2)); return 0; } Это вот абсолютно законно
Andrii
Честно говоря понятно не до конца
А если поменять int foo() на int foo(void) то я получу: test.c: In function ‘main’: test.c:10:25: error: too many arguments to function ‘foo’ printf("num: %d\n", foo("test", 1, 2)); ^~~ test.c:3:5: note: declared here int foo(void) ^~~ shell returned 1
Andrii
Andrii
Вот тут Си отличается от С++. В С++ int foo() аналогично int foo(void)
Там есть отличия, особенно в последних сишных стандартах: массивы на стеке, ...
Vladislav
У меня наоборот, main последняя
а ковычки вы как открываете?
Vladislav
Какие кавычки?
void f(){ ... } void f() { ... }
Igor
void f(){ ... } void f() { ... }
он же код выше давал :)
Борисов
Могу ещё тему для холивара подкинуть Вот так int *p Или так int * p Или так int* p
Борисов
Как пишут тру кодеры ?)
Vladislav
void* p = NULL;
Dmitriy (Дима)
Вот вы понаписале 🤪
Igor
По разному.
Не ломай Владиславу мозг :) скажи как правильно :)
Борисов
В общем и целом это была шутка ... 😄😄😄
Vladislav
я ничайно акк друга взломал, чисто технически)
Andrii
Могу ещё тему для холивара подкинуть Вот так int *p Или так int * p Или так int* p
Это в C# пилит одна фирма, и там стандарт написания кода идёт до появления самого языка. Си, да и С++, каких-либо устоявшизся стандартов не имеет, в общем каждый пишет как умеет. Поэтому пишут по всякому
Andrii
void* p = NULL;
Но void *p = NULL, *q = NULL;
Andrii
))) Да согласен я, шутканул просто ))
В C++ даже нету общего для всех строкового типа, а ты кодирование... Часто библиотека поставляет свой собственный трушный строковый класс :)
Денис
вот так: void* p = NULL;
Сирены за окном... Трясется все. ТЫ ЧИВО НАДЕЛАЛ
Vladislav
по кодинг стайлу можно сразу определить что это за человек
Igor
по кодинг стайлу можно сразу определить что это за человек
ага если сильно радикально уверене что есть только один правильный способ значит нубас :)
Igor
Мой линтер - стопроцентный нубас значит
линтер тоже можно настраивать. Ясно что есть общепринятые варианты, но основное все же договориться в команде остальное фигня
Денис
Лишний пробел в конце строки кода!? ТВОЙ ПРОЕКТ НЕ СОБЕРЕТСЯ СЕГОДНЯ, ПОНЯЛ!? И действительно не собирается...
Денис
Зачем его мыть
😏 чтобы не было запаха
Алексей
😁
Igor
Мне нравится, что он такой жесткий тип.
мы давече вулнерабилити чек прикрутили было смешнее :) типа дырки безопаности во внешних либах чекает :) и если с дырками надо обновлять иначе не собирается :) смешно когда версии без уязвимости нет пришлось переделывать на предупреждение :)
Денис
так мы в CI и прикрутили :)
А... Ну там и ворнинги наверное не сильно нужны ) но блин суровые вы ребята. Хотел бы я с вами поработать.
Igor
Круто же )
да я тоже привык норм команда :) только я их плохо воспитал, я когда на офис приезжаю мы бухаем :) раньше я раз в месяц за зарплатой ездил и это было логично жил в другой области :) а сейчас перебрался в киев и на офис хоть не дедь, всеравно все скатывается в бухач :) так и работаю из дома