Создание суда функционирует в C?

фильтры IE плюс CSS преобразовывает ( Safari и Firefox).

поддержка IE является самой старой, Safari имеет [по крайней мере, некоторых?] поддержка в 3.1.2, и Firefox не будет иметь поддержки до 3.1.

, С другой стороны, я рекомендовал бы соединение Canvas/VML или SVG/VML. (Холст имеет более широкую поддержку.)

5
задан 3 revs, 2 users 92% 8 November 2013 в 16:04
поделиться

3 ответа

Это верно, поскольку в C нет перегрузки операторов, вы не можете изменить поведение оператора <<, он всегда будет выполнять битовый сдвиг, поэтому невозможно написать cout с точной семантикой, которую он имеет в C ++, в C.

Из-за интереса, g ++ (компилятор GNU C ++) - это написано в основном на C.

5
ответ дан 18 December 2019 в 09:51
поделиться

Подумать об этом может помочь перевод между синтаксисом оператора «<<» и синтаксисом функции «оператор <<». Ваш пример C ++ эквивалентен этому фрагменту кода C ++:

operator<< ( operator<< (cout, "Hello World!"), endl);

Первое, что вы должны здесь заметить, это то, что на самом деле в cout вообще не так много хитрости. Что является умным, так это функция operator << - в частности, версия функции operator <<, которая принимает объект потока (которым является cout, но и многие другие вещи тоже) в качестве своего первого аргумента. Или, что еще точнее, диапазон функций operator <<, которые принимают объект потока в качестве первого аргумента и принимают конкретную вещь в качестве второго аргумента - есть по одному для каждого типа объекта, который вы можете поместить в поток cout. Вы можете увидеть в этом синтаксисе один из приемов C ++, тоже; функции operator << в объектах потока всегда возвращают объект потока, который им был дан, что позволяет создавать цепочки такого рода.

Чтобы поместить код C ++ в компоновщики и системные ABI, которые ожидают синтаксиса функций, подобных C, большинство компиляторов C ++ "искажать" имена функций, чтобы закодировать в них тип аргументов, которые у них есть. (Кроме того, «<<» не является допустимым именем функции в стиле C.) Итак, если вы посмотрите на сгенерированную сборку для этого бита функции, вы увидите, что имена двух функций были отличаются друг от друга - они будут иметь суффиксы, указывающие типы аргументов. Вы можете сделать что-то подобное вручную:

operator_lshift__stream__endl(
  operator_lshift__stream__string(cout, "Hello World!"), endl);

И вот вам кое-что, что вы можете реализовать на C.

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

Чтобы поместить код C ++ в компоновщики и системные ABI, которые ожидают синтаксиса функций, подобных C, большинство компиляторов C ++ "искажают" имена функций, чтобы закодировать в них тип аргументов, которые у них есть. (Кроме того, «<<» не является допустимым именем функции, подобным C.) Итак, если вы посмотрите на сгенерированную сборку для этого бита функции, вы увидите, что имена двух функций были отличаются друг от друга - они будут иметь суффиксы, указывающие типы аргументов. Вы можете сделать что-то подобное вручную:

operator_lshift__stream__endl(
  operator_lshift__stream__string(cout, "Hello World!"), endl);

И вот вам кое-что, что вы можете реализовать на C.

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

Чтобы поместить код C ++ в компоновщики и системные ABI, которые ожидают синтаксиса функций, подобных C, большинство компиляторов C ++ "искажают" имена функций, чтобы закодировать в них тип аргументов, которые у них есть. (Кроме того, «<<» не является допустимым именем функции, подобным C.) Итак, если вы посмотрите на сгенерированную сборку для этого бита функции, вы увидите, что имена двух функций были отличаются друг от друга - у них будут суффиксы, указывающие типы аргументов. Вы можете сделать что-то подобное вручную:

operator_lshift__stream__endl(
  operator_lshift__stream__string(cout, "Hello World!"), endl);

И вот вам кое-что, что вы можете реализовать на C.

Чтобы поместить код C ++ в компоновщики и системные ABI, которые ожидают синтаксиса функций, подобных C, большинство компиляторов C ++ "искажают" имена функций, чтобы закодировать в них тип аргументов, которые у них есть. (Кроме того, «<<» не является допустимым именем функции, подобным C.) Итак, если вы посмотрите на сгенерированную сборку для этого бита функции, вы увидите, что имена двух функций были отличаются друг от друга - они будут иметь суффиксы, указывающие типы аргументов. Вы можете сделать что-то подобное вручную:

operator_lshift__stream__endl(
  operator_lshift__stream__string(cout, "Hello World!"), endl);

И вот вам кое-что, что вы можете реализовать на C.

Чтобы поместить код C ++ в компоновщики и системные ABI, которые ожидают синтаксиса функций, подобных C, большинство компиляторов C ++ "искажают" имена функций, чтобы закодировать в них тип аргументов, которые у них есть. (Кроме того, «<<» не является допустимым именем функции, подобным C.) Итак, если вы посмотрите на сгенерированную сборку для этого бита функции, вы увидите, что имена двух функций были отличаются друг от друга - они будут иметь суффиксы, указывающие типы аргументов. Вы можете сделать что-то подобное вручную:

operator_lshift__stream__endl(
  operator_lshift__stream__string(cout, "Hello World!"), endl);

И вот вам кое-что, что вы можете реализовать на C.

8
ответ дан 18 December 2019 в 09:51
поделиться

C на самом деле является популярным языком реализации для компиляторов C ++ и стандартных библиотек (на самом деле, как и сам C ++ - концепция, иногда известная как самостоятельный хостинг или самозагрузка языка), и вы можете изучить все исходники богатой сложной стандартной библиотеки C ++ (плюс расширения) здесь (извините, это gcc 3 - не могу найти дерево исходных текстов gcc 4, которое так же легко просматривать в Интернете, хотя, конечно, вы можете легко загрузить эти источники и изучить их на своем локальном компьютере).

Лично я бы посоветовал начать с хорошей книги, такой как эта - источники будут гораздо более значимыми для понимания вы, как только вы хорошо разберетесь во всех неясных уголках и закоулках iostreams C ++ (в качестве бонуса,книга также проведет вас с гидом по местам - держитесь за шляпу! -).

4
ответ дан 18 December 2019 в 09:51
поделиться