- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
XmlWriter<xhtml11::XHtmlDocument>(stream)
<html
<head
<title
<"Hello world!"
>title
>head
<body
<p
<"Some nice paragraph text."
>p
<img(src="http://example.com/hello.jpg",alt="Hello")>img
>body
>html;
кресты в квадрате. любителям темплейтов посвящается.
http://www.vandenoever.info/blog/2015/07/05/literal-xml-in-c++.html
Creating and processing XML feels awkward in most programming languages. With Blasien, a tiny C++11 header library, XML in C++ feels easy and natural. As an extra the XML that is written is mostly validated at compile time.
меня уже даже не удивит если кто на темплейтах/операторах/этц интерпретатор перла напишет...
Смотрю на стандарт ++14 и жду не дождусь 2014 года... ОЧЁРТ
из всех извратных (полезных) извратов что видел, это наверное самый извратный.
http://www.boost.org/doc/libs/1_58_0/libs/spirit/doc/html/spirit/qi/tutorials/mini_xml___asts_.html
но идея сама по себе интересная - перегружеными операторами дерево синтакса строить.
А что, так можно было? О_о
Интересно, а можно ли как-то извернуться и вогнать туда произвольные атрибуты, используя наиболее короткую запись.
Приближения, которые приходят в голову:
1. Конструктор от строки: запись $("src")="...", $("alt")="...." - 5 лишних символов на параметр
2. Шаблонная использовать строки как отдельный параметр: "src", "...", "alt", "..." - 2 лишних символов на параметр + нельзя "="
3. Макрос, который делает # своим нечётным аргументам: запись src, "...", alt, "..." - нельзя "="
капитан в треде
perforce чтоль?
Оператор запятая возвращает правый аргумент. Оператор присваивания возвращает const char* (goatse). Но функция ничего не принимает!
Рассказать в деталях, как оно работает, или оставить в качестве домашнего задания?
Подсказка: при соглашении cdecl стек чистится вызывающим кодом.
теперь понятно
Всё было на совести программиста, компилятор ничего не проверял.
Просто писали foo() и всё.
Когда ввели возможность указывать аргументы, то ради обратной совместимости сделали так:
1) foo() -- НЕИЗВЕСТНО какое аргументы (комплиятор может не проверять)
2) foo(void) --аргов точно нет.
Мне кажется это написано в книжечке Кернигана и Ричи. Такая тонкая книжка по основам сей, достаточно годная.
собственно, ворнинги были еще в борланд си 1993го года:) (правда там был ключик "ANSI C" или "K&C", и вот в ANSI C были варнинги)
Ну вот вижалси до сих пор компилирует, но пишет ворнинги
https://msdn.microsoft.com/en-us/library/efx873ys.aspx
зы: может быть и напорица на что-то, я никогда не поддерживал код, написанный до 1989го года (или когда там вышли анси си)
Обладая этим знанием можно его получить.
Еще есть va_arg, но я не знаю будет-ли он тут работать.
Но Борманд не получал аргументов, он юзал глобальные переменные
Ты хочешь сделать функцию с переменным числом аргументов?
Ну так юзай va_arg, только делай это явно, и будет тебе щастье.
Си нужен чтобы переносить низкоуровневый шлак между платформами (особенно между процессорами), ну и писать на нём всё таки проще, чем на асме.
В дефинишене можно было указывать параметры, в декларейшене было не обязательно.
причем в дефинишене они писались немного не так.
Так что обращаться можно было очень просто. Просто комплятор не проверял что ты туда передаешь. Ты мог сказать kokoko("foo") и получить туда адрес
функция без аргументов это void img(void)
а раз не указано, то пофиг скока передавать
Чай не груви, не руби, и не котлин