LINUX.ORG.RU

Не велосипед ли я придумал часом?

 , , ,


0

4

Типа , и чтобы инлайна не было, и чтобы в одном файле.

//Velosiped.h

#ifndef UNTITLED_VELOSIPED_H
#define UNTITLED_VELOSIPED_H

#include <stdio.h>

class Velosiped {
public:
    Velosiped();
    void print();
    virtual ~Velosiped();
};

#ifdef VELOSIPED_DEF

Velosiped::Velosiped() {
    printf("Ne velosiped ");
}

void Velosiped::print() {
    printf("li ya pridumal ");
}

Velosiped::~Velosiped() {
    printf("chasom ?");
}

#endif
#endif
//Velosiped.cpp
#define VELOSIPED_DEF
#include "Velosiped.h"
#undef VELOSIPED_DEF
//main.cpp
#include Velosiped.h
int main(){
    Velosiped velik;
    velik.print();
    return 0;
}

Может кто еще, что то похожее делает?

Возьмите современный язык и не мучайтесь.

RazrFalcon ★★★★★ ()

Так прямо в main.cpp и пиши. Будет в одном файле. /thread

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

А почему обязательно тормознутый хлам?

Есть D, есть Rust, наконец, есть FreePascal.

Ну и проблема C++ не в том, что там всё в двух файлах. Это как раз удобно и позволяет отделить мух от котлет.

Проблема C++ в том, что там отсутствует модуль как логическая единица языка, а имитация модульности делается с помощью препроцессора, линкера, говна и палок. Отсюда низкая скорость компиляции, непредсказуемость результата компиляции при пропущенном #include для какой-либо внешней библиотеки и вообще малопонятные сообщения об ошибках. Я, положим, за много лет привык, но новичка это способно выморозить.

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

Отсюда низкая скорость компиляции, непредсказуемость результата компиляции при пропущенном #include для какой-либо внешней библиотеки и вообще малопонятные сообщения об ошибках.

Да,да, но для меня это все ерунда, главное чтобы на выходе бриллиант был :)

FreakMurderer ()
Ответ на: комментарий от hobbit

Rust
Отсюда низкая скорость компиляции

Уважаемый эксперт, как я понимаю все ваши познания не далеко ушли от агиток?

непредсказуемость результата компиляции при пропущенном #include для какой-либо внешней библиотеки и вообще малопонятные сообщения об ошибках.

Действительно, прям так сходу импорты что-то меняют? И что же? Ничего.

Ах да,

Есть D, есть Rust, наконец, есть FreePascal.

Всё это тормазнутый хлам.

rustonelove ()

и чтобы инлайна не было

Ты хоть причины проведения столь гениальных решения для себя определил? Поделись.

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

Поделись

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

FreakMurderer ()
Ответ на: комментарий от hobbit

Проблема C++ в том, что там отсутствует модуль как логическая единица языка, а имитация модульности делается с помощью препроцессора

Нет :-) Лол :-) Имитация модульности делается в цепепе с помощью неймспейсов :-) Лол :-)

anonymous ()
Ответ на: комментарий от hobbit

Проблема C++ в том, что там отсутствует модуль как логическая единица языка

Проблема C++ в том, что есть куча готовых С/С++ библиотек, которые никто не будет переписывать.

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

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

Ну т.е. ты очередной нулёвый последователь какой-то методички? Зачем ты мне пишешь какую-то ахинею про ключ, если ты нихрена в этом не понимаешь?

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

Ну ок, объясни мне в чем я не прав, по человечески. Я в принципе за этим сюда и пришёл.

FreakMurderer ()

А как насчет __attribute__((noinline))? Или я что-то неправильно понимаю?

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

И что, при этом можно все хранить в хидере? А в какой объектник будут определения помещаться? А не будет ли: error already defined in some.obj?

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

Да,да, но для меня это все ерунда, главное чтобы на выходе бриллиант был :)

Тогда к чему ваш вопрос в топике?

Может кто еще, что то похожее делает?

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

Сравнительно ерунда, но все ж конечно, же не такая ерунда. Нет куда времени деть, чтобы не придираться к словам и мелочам? Идиотия бл...

FreakMurderer ()
Ответ на: комментарий от rustonelove

Всё это тормазнутый хлам.

Значит C++ тоже «тормазнутый хлам».

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

Сравнительно ерунда, но все ж конечно, же не такая ерунда. Нет куда времени деть, чтобы не придираться к словам и мелочам? Идиотия бл...

Что за вещества вы употребляете?

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

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

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

Ну ок, объясни мне в чем я не прав, по человечески.

А ты что-то сказал? Вроде как нет. Ведь утверждал ты, и ты мне должен рассказать, а не я.

Я в принципе за этим сюда и пришёл.

Ты начал что-то делать и это должно иметь смысл. Ты говоришь о «без инлайна» и у тебя должны быть аргументы за это «без». Ты ведь это делаешь не просто так?

rustonelove ()
Ответ на: комментарий от pftBest

Значит C++ тоже «тормазнутый хлам».

Неверно. Кресты крестам рознь. Возможностей к написанию не тормазнутого хлама у крестов несоизмеримо больше, кем и всего остального. Больше не-тормазнугого кода, больше не-тормазнугого рантайма. Больше не-томарзнуготого компилятора. Такие дела.

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

быть аргументы за это «без».

- методы, определённые вне класса не являются «инлайновыми»; - в случае, если хидер Velosiped.h инклудится другими cpp, обычно - возможны ошибки вида:error LNK, already defined in some*.obj. Чтобы это исправить надо добавлять ключевое слово «inline» к определению функции или выносить определения в отдельный CPP. - в моём примере этого делать не надо (добавлять инлайн или выносить в CPP). Отсюда следует:«и чтобы инлайна не было, и чтобы в одном файле.»

Если не прав, повторяю - нормально поясни в чем.

FreakMurderer ()

Лучше уж .cpp файл с реализацией инклудь в тело хедера под ифдефом, чем так.

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

Потому что иначе любое изменение в реализации класса будет приводить к перекомпиляции остальной чатси проекта.

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

Я бы не стал заморачиваться, ибо решается какая-то несуществующая проблема.

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

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

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

И что, тело в одном хедере этому как-то поможет?

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

Ну легче прыгать в одном файле, даже несмотря на раздельную реализацию чем между файлами (все в одном месте, порядок как бы, как в Java или Sharp, к которым я раньше привык), или я чего то не понимаю?

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

Если бы ты писал в каком-нибудь Turbo C образца начала 90х, я бы тебя ещё как-то понял.

Переход между .cpp/.h в современных IDE обычно уже хоткей, в том же Emacs я открываю по 6 файлов в одном фрейме и что интерфейс, что реализация у меня перед глазами.

Курочить код для этого точно не надо.

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

Ну да, но все равно легче:) Ладно, попробую так - потом опыт подскажет прав я был или нет.

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

Зачем ты мне пишешь херню? Какая мне разница с того, что ты там ваяешь? Я говорю вот об этом:

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

Вот именно за это тебе и надо отвечать. Если ты нихрена не знаешь, а про какой-то «инлайн плох» узнал из какой-то убогой макулатуры, то зачем ты это делаешь?

Какой смысл делать то, причины и следствия чего ты не осознаёшь? Просто так?

rustonelove ()

Придумал. Вполне используется в тех же stb(выше уже линк кинули).

Мне вообще нравится ЛОР. Каждый раз заводя тему про кресты, в неё набигают кукарекать^Wоффтопить те, кто по какой-то причине не любят кресты. И это никак не наказывается, несмотря на то, что несёт околонулевую смысловую нагрузку и никоим образом не отвечают на вопрос ТС-а.

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

В stb все же несколько другая мотивация подобного решения (спорная, но хоть как-то оправданная), чем у ТСа.

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

Конечно. ТС не хочет между файлами переключаться, а те хотят таскать один файл вместо >=2. При этом то что хочет ТС уже давно реализовано даже в самых тупых редакторах текста, вроде тех, что с неудобной клавиатурной раскладкой. :)

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

уже давно реализовано даже в самых тупых редакторах текста

Поподробней можно?

FreakMurderer ()
Ответ на: комментарий от yoghurt

то есть 2 файла в двух окнах (фреймах) или как ? Если да, то не то это, не то же самое... Чем все в одном файле (Имхо)

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

И вообще я на Clion-е, и переходить не собираюсь. Так что что то там другое меня не слишком интересует.

FreakMurderer ()

Что если убрать #ifdef VELOSIPED_DEF и тогда cpp файл не потребуется - ты не знал?

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

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от FreakMurderer

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

Тебе нужен нормальный редактор, вот в чем дело.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от FreakMurderer

Тогда освой его хорошенько, всё он позволяет, и закладки там нормально сделаны.

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