Сейчас на форуме: asfa, _MBK_, Rio (+5 невидимых)

 eXeL@B —› Вопросы новичков —› VC++ : что за зверь __nullterminated в winnt.h ?
Посл.ответ Сообщение

Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 октября 2008 17:05 · Поправил: windwail
· Личное сообщение · #1

Значит по порядку.
Разбираю простенькую программу. В ней встречаю PSTR... ну вроде бы все ясно, ссылка на строку. Гляжу где это определено, нахожу следующее:

// winnt.h
typedef __nullterminated PSTR *PZPSTR;

Становится еще интереснее - что же такое __nullterminated

// sal.h
#define __nullterminated __readableTo(sentinel(0))

Чувствую мозг уже кипит Что такое sentinel(0) найти так и не смог, google не помог... по __readableTo нахожу следующее:

// sal.h
#define __readableTo(extent)

Фсе... тупик...
Во-первых, что такое sentinel(0), интуитивно я догадываюсь что это что-то связанное с 0м в конце строки... но ничего по этой функции не нашел.
Во-вторых, что такое __readableTo... как-то странно эта хрень определена... #define же работает как определялка констант, которые потом в тексте заменяются, или не так ? #define MAX 100 - так например... а тут функция какая-то...
В-третьих, как это можно привязать к _nullterminated... это что-то вроде префикса характеризующего PSTR ?

А еще в документации встретил такую загадочную вещь

typedef char FlagType;

void myproc( int )
{
int FlagType;
}

Как это понимать ? Получается что - "int char" ?
Я вроде немного в си понимаю, прочитал пару книжек... но эти вещи мой моск ставят в тупик...
Может быть подскажете где про такое можно почитать ? Может книжка есть где такие мелочи объясняются ?

Заранее спасибо.
Не судите строго я нуб в этом



Ранг: 13.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 27 октября 2008 17:41
· Личное сообщение · #2

Я так понимаю: pointer to null-terminated string - указатель на строку, заканчивающуюся нулем, т.е. на обычную С-шную строку. читается она пока не встретится 0 - признак конца строки.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 27 октября 2008 20:55 · Поправил: s0larian
· Личное сообщение · #3

windwail, не парься по поводу этих макросов - на работу твоей проги это не влияет. Это всё было написано что б расширить (уточнить) спецификации си-шных функции - то есть указать что и кто может читать/писать. Ну а потом в MS есть спец. build в котором эти макросы разворачиваются и пара tools для проверки этих specs. Сделано это было что б найти и закрыть дырки в реализации.


 eXeL@B —› Вопросы новичков —› VC++ : что за зверь __nullterminated в winnt.h ?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати