PDA

Просмотр полной версии : [Вопрос] char



Desulaid
13.07.2015, 18:10
В продолжительном сраче беседе в теме на одном форуме, появился вопрос: char - это оператор или все таки тип данных и есть ли в Pawn вообще типы данных?

.pdf документация к языку говорит одно

https://pp.vk.me/c624627/v624627894/409c8/P0w_VUGhHoE.jpg

wiki говорит другое

http://wiki.sa-mp.com/wiki/Keywords:Operators#char

$continue$
13.07.2015, 18:22
char - тип данных. Любая документация по ЯП это констатирует.

L0ndl3m
13.07.2015, 22:56
char - тип данных. Любая документация по ЯП это констатирует.
В pawn это не тип...

Daniel_Cortez
13.07.2015, 23:13
Нет в Pawn типов данных, как в других языках. Даже в документации указано, что это бестиповый язык.
Единственный тип данных, поэерживаемый компилятором Pawn - целочисленный. Есть ещё Float, но он объявлен в одном из стандартных инклудов Pawn (технически это пользовательское пространство), в компиляторе этот тип не определён. Тип bool определён в компиляторе, но это всего лишь синтаксический сахар, на практике этот тип абсолютно бесполезен: переменным целочисленного типа можно присвоить true/false, а булевым переменным - целочисленные значения. С данными типа Float такое не прокатит только потому, что название типа начинается с заглавной буквы (да, вот такой странный признак для задания строгой/нестрогой типизации), кроме того для Float переопределён оператор "=" и если попытаться присвоить вещественной переменной целочисленное значение, будет произведён неявный вызов функции float() для конвертации целого числа в вещественное.

Что же касается char, то это всего лишь оператор, который означает, что число перед ним нужно поделить на количество байт в ячейках (4 в версии для SA:MP, но в других может быть и по 8 байт, вот здесь (http://www.vaultmp.com), например).
Обычно его используют в указании размера массивов:

new arr[32 char]; // массив 8 ячеек (32 байт)
Но ничто не мешает использовать этот оператор в других случаях:

new x = 32 char; // x = 8
Стоит заметить, что это не просто деление на 4. "3 char" вернёт 1, а не 0, "5 char" - 2 и т.д.
Без оператора char указанный выше 2-й пример будет выглядеть так:


// допустим, будет 4 (имейте в виду, что, как я уже говорил, в других реализациях значение может меняться,
// так что не указывайте число 4 в явном виде, только через константы, иначе нарушите переносимость кода)
const BYTES_PER_CELL = cellbits / charbits;

// макрос для вычисления кол-ва ячеек
#define tobytes(%0) ((%0) + BYTES_PER_CELL - 1) / BYTES_PER_CELL

// x = 8
new x = tobytes(32);

Здесь cellbits и charbits - встроенные константы Pawn, определённые в компиляторе наравне с __Pawn (указывает версию компилятора, для стандартного pawncc из комплекта сервера SA:MP это 0x0302, для версии от Zeex - 0x030A), debug (уровень отладки, с которым скомпилирован скрипт, указывается в ключе компилятора -d), cellmin, cellmax, charmin, charmax, ucharmax, true, false и EOS (а также __line и __compat в версии от Zeex).



char - тип данных. Любая документация по ЯП это констатирует.
Назовите номер страницы в документации, где вы это нашли.


.pdf документация к языку говорит одно

wiki говорит другое

http://wiki.sa-mp.com/wiki/Keywords:Operators#char
Позвольте поинтересоватьтся, там хоть где-нибудь сказано, что char - это тип данных? И к какой версии Pawn документация, к 4.0? В ней довольно много отличий от версии 3.2, которой уже давно нет на сайте разработчика Pawn (насколько помню, в комплекте YSI сохранились документы по 3.2). Кстати, если у вас доки к версии 4.0, не могли бы залить их на какой-нибудь хостинг? Недавно они тоже куда-то пропали с сайта разработчика, ссылки не рабочие.
И да, что за "форум"? Govno-Info, "игровой портал о программировании в Pawno"? Первым в голову приходит именно он, ведь обычно это там во весь голос твердят, что например "весь код лучше писать в одну строку, так оптимизированнее!" или "командные процессоры нагружают сервер, лучше делать strcmp по over9000 раз" и т.п. (орфографические ошибки, капс и ядовитый цветной шрифт в цитатах убраны для удобства читателей). Но если я ошибся, убедительная просьба к вам написать название форума в ЛС.

$continue$
13.07.2015, 23:33
Нет в Pawn типов данных, как в других языках. Даже в документации указано, что это бестиповый язык.
Единственный тип данных, поэерживаемый компилятором Pawn - целочисленный. Есть ещё Float, но он объявлен в одном из стандартных инклудов Pawn (технически это пользовательское пространство), в компиляторе этот тип не определён. Тип bool определён в компиляторе, но это всего лишь синтаксический сахар, на практике этот тип абсолютно бесполезен: переменным целочисленного типа можно присвоить true/false, а булевым переменным - целочисленные значения. С данными типа Float такое не прокатит только потому, что название типа начинается с заглавной буквы (да, вот такой странный признак для задания строгой/нестрогой типизации), кроме того для Float переопределён оператор "=" и если попытаться присвоить вещественной переменной целочисленное значение, будет произведён неявный вызов функции float() для конвертации целого числа в вещественное.

Что же касается char, то это всего лишь оператор, который означает, что число перед ним нужно поделить на количество байт в ячейках (4 в версии для SA:MP, но в других может быть и по 8 байт, вот здесь (http://www.vaultmp.com), например).
Обычно его используют в указании размера массивов:

new arr[32 char]; // массив 8 ячеек (32 байт)
Но ничто не мешает использовать этот оператор в других случаях:

new x = 32 char; // x = 8
Стоит заметить, что это не просто деление на 4. "3 char" вернёт 1, а не 0, "5 char" - 2 и т.д.
Без оператора char указанный выше 2-й пример будет выглядеть так:


// допустим, будет 4 (имейте в виду, что, как я уже говорил, в других реализациях значение может меняться,
// так что не указывайте число 4 в явном виде, только через константы, иначе нарушите переносимость кода)
const BYTES_PER_CELL = cellbits / charbits;

// макрос для вычисления кол-ва ячеек
#define tobytes(%0) ((%0) + BYTES_PER_CELL - 1) / BYTES_PER_CELL

// x = 8
new x = tobytes(32);

Здесь cellbits и charbits - встроенные константы Pawn, определённые в компиляторе наравне с __Pawn (указывает версию компилятора, для стандартного pawncc из комплекта сервера SA:MP это 0x0302, для версии от Zeex - 0x030A), debug (уровень отладки, с которым скомпилирован скрипт, указывается в ключе компилятора -d), cellmin, cellmax, charmin, charmax, ucharmax, true, false и EOS (а также __line и __compat в версии от Zeex).



Назовите номер страницы в документации, где вы это нашли.



Позвольте поинтересоватьтся, там хоть где-нибудь сказано, что char - это тип данных? И к какой версии Pawn документация, к 4.0? В ней довольно много отличий от версии 3.2, которой уже давно нет на сайте разработчика Pawn (насколько помню, в комплекте YSI сохранились документы по 3.2). Кстати, если у вас доки к версии 4.0, не могли бы залить их на какой-нибудь хостинг? Недавно они тоже куда-то пропали с сайта разработчика, ссылки не рабочие.
И да, что за "форум"? Govno-Info, "игровой портал о программировании в Pawno"? Первым в голову приходит именно он, ведь обычно это там во весь голос твердят, что например "весь код лучше писать в одну строку, так оптимизированнее!" или "командные процессоры нагружают сервер, лучше делать strcmp по over9000 раз" и т.п. (орфографические ошибки, капс и ядовитый цветной шрифт в цитатах убраны для удобства читателей). Но если я ошибся, убедительная просьба к вам написать название форума в ЛС.
Не знаю, как в Pawn, но в нормальных ЯП это тип :agree:

Desulaid
14.07.2015, 00:06
Нет в Pawn типов данных, как в других языках. Даже в документации указано, что это бестиповый язык.
Единственный тип данных, поэерживаемый компилятором Pawn - целочисленный. Есть ещё Float, но он объявлен в одном из стандартных инклудов Pawn (технически это пользовательское пространство), в компиляторе этот тип не определён. Тип bool определён в компиляторе, но это всего лишь синтаксический сахар, на практике этот тип абсолютно бесполезен: переменным целочисленного типа можно присвоить true/false, а булевым переменным - целочисленные значения. С данными типа Float такое не прокатит только потому, что название типа начинается с заглавной буквы (да, вот такой странный признак для задания строгой/нестрогой типизации), кроме того для Float переопределён оператор "=" и если попытаться присвоить вещественной переменной целочисленное значение, будет произведён неявный вызов функции float() для конвертации целого числа в вещественное.

Что же касается char, то это всего лишь оператор, который означает, что число перед ним нужно поделить на количество байт в ячейках (4 в версии для SA:MP, но в других может быть и по 8 байт, вот здесь (http://www.vaultmp.com), например).
Обычно его используют в указании размера массивов:

new arr[32 char]; // массив 8 ячеек (32 байт)
Но ничто не мешает использовать этот оператор в других случаях:

new x = 32 char; // x = 8
Стоит заметить, что это не просто деление на 4. "3 char" вернёт 1, а не 0, "5 char" - 2 и т.д.
Без оператора char указанный выше 2-й пример будет выглядеть так:


// допустим, будет 4 (имейте в виду, что, как я уже говорил, в других реализациях значение может меняться,
// так что не указывайте число 4 в явном виде, только через константы, иначе нарушите переносимость кода)
const BYTES_PER_CELL = cellbits / charbits;

// макрос для вычисления кол-ва ячеек
#define tobytes(%0) ((%0) + BYTES_PER_CELL - 1) / BYTES_PER_CELL

// x = 8
new x = tobytes(32);

Здесь cellbits и charbits - встроенные константы Pawn, определённые в компиляторе наравне с __Pawn (указывает версию компилятора, для стандартного pawncc из комплекта сервера SA:MP это 0x0302, для версии от Zeex - 0x030A), debug (уровень отладки, с которым скомпилирован скрипт, указывается в ключе компилятора -d), cellmin, cellmax, charmin, charmax, ucharmax, true, false и EOS (а также __line и __compat в версии от Zeex).



Назовите номер страницы в документации, где вы это нашли.



Позвольте поинтересоватьтся, там хоть где-нибудь сказано, что char - это тип данных? И к какой версии Pawn документация, к 4.0? В ней довольно много отличий от версии 3.2, которой уже давно нет на сайте разработчика Pawn (насколько помню, в комплекте YSI сохранились документы по 3.2). Кстати, если у вас доки к версии 4.0, не могли бы залить их на какой-нибудь хостинг? Недавно они тоже куда-то пропали с сайта разработчика, ссылки не рабочие.
И да, что за "форум"? Govno-Info, "игровой портал о программировании в Pawno"? Первым в голову приходит именно он, ведь обычно это там во весь голос твердят, что например "весь код лучше писать в одну строку, так оптимизированнее!" или "командные процессоры нагружают сервер, лучше делать strcmp по over9000 раз" и т.п. (орфографические ошибки, капс и ядовитый цветной шрифт в цитатах убраны для удобства читателей). Но если я ошибся, убедительная просьба к вам написать название форума в ЛС.

Вот например здесь (https://msdn.microsoft.com/ru-ru/library/cc953fe1.aspx) указано, что char - тип. И да, ты угадал, тот таинственный форум - это G-I. Что касается версии книги, то я без понятия. Книга за июнь 2011 года. Там о версии я ничего не нашел.

$continue$
14.07.2015, 00:08
Вот например здесь (https://msdn.microsoft.com/ru-ru/library/cc953fe1.aspx) указано, что char - тип. И да, ты угадал, тот таинственный форум - это G-I. Что касается версии книги, то я без понятия. Книга за июнь 2011 года. Там о версии я ничего не нашел.
Это плюсы...

Desulaid
14.07.2015, 00:32
Держите ту книгу: завладеть литературой (https://yadi.sk/i/KMt_-DhCgrxA5)