информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеАтака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный взлом GoDaddy 
 Просроченный сертификат ломает... 
 Phrack #70/0x46 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Спасибо. Кул ;) 22.08.06 02:49  Число просмотров: 2115
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
<programming>
[C++] колво символов в строке 21.08.06 04:34  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Что бы грамотнее было ...?

_tcscpy_s( dest, sizeof(dest)/sizeof(dest[0]), src);

или

_tcscpy_s( dest, sizeof(dest)/sizeof(TCHAR), src);

Кажется первый вариант чуть лучше. Спасибо.
[C++] Дык эти макросы это все таки C 21.08.06 15:05  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Но раз уже ты записал профиль C++, то лови стандартный плюсовый сниппет для получения количества элементов в массиве

template <typename T, size_t N>
inline size_t array_size(T (&)[N]) {return N;}

---

Пользоваться соответственно так:

#include <iostream>

template <typename T, size_t N>
inline size_t array_size(T (&)[N]) {return N;}

int a[10];
struct mystruct {int a, b, c;} b[12];
char c[] = "adfgsdfhsfjshj";

int
main() {
	std::cout << array_size(a) << std::endl << array_size(b) << std::endl << array_size(c) << std::endl;
}

---

Самое забавное, что темплейтный вариант позволяет частичным инстанцированием изменить поведение для некоторых типов/размеров массивов.

> Что бы грамотнее было ...?
>
> _tcscpy_s( dest, sizeof(dest)/sizeof(dest[0]), src);
>
> или
>
> _tcscpy_s( dest, sizeof(dest)/sizeof(TCHAR), src);
>
> Кажется первый вариант чуть лучше. Спасибо.

Что же касается чистого C, то да, лучше привязываться к переменной, а не к ее предполагаемому типу (который запросто может поменяться).
Кстати, почему-то не хочет компилироваться в VC 6 : 23.08.06 05:19  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
>#include <iostream>
>
> template <typename T, size_t N>
> inline size_t array_size(T (&)[N]) {return N;}

Кстати, почему-то не хочет компилироваться в VC 6 :
error C2265: '<Unknown>' : reference to a zero-sized array is illegal

В VC 8.0 - проеблем нет

VC6 - 98-й год выпуска. Вряд ли он сильно совместим со стандартом 98-го года :-) 23.08.06 14:19  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> >#include <iostream>
> >
> > template <typename T, size_t N>
> > inline size_t array_size(T (&)[N]) {return N;}
>
> Кстати, почему-то не хочет компилироваться в VC 6 :
> error C2265: '<Unknown>' : reference to a zero-sized
> array is illegal

Я слышал, что в VC6 и помимо несовместимости со стандартом куча проблем. Нормальный компилятор появился только начиная с VS.Net (7.0)
Спасибо. Кул ;) 22.08.06 02:49  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Ой, я как прочитал Александреску - понял, что *вообще ничего* не знаю о темплейтах 22.08.06 04:08  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Вон у него в книге по ходу дела пишется библиотека для метапрограммирования (loki)

Ну и для общего развития стоит посмотреть на различные реализации STL, boost тоже весьма интересен (хотя с наскоку многие вещи - хрен поймешь).
Посмотрю. Только добацаю этот проект ;) 23.08.06 03:57  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Предпочитаю первый вариант, а именно размер элемента, а не... 21.08.06 11:49  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
<"чистая" ссылка>
> Что бы грамотнее было ...?
>
> _tcscpy_s( dest, sizeof(dest)/sizeof(dest[0]), src);
>
> или
>
> _tcscpy_s( dest, sizeof(dest)/sizeof(TCHAR), src);
>
> Кажется первый вариант чуть лучше. Спасибо.

Предпочитаю первый вариант, а именно размер элемента, а не размер типа.
Какие баги это позволяет избежать - вдруг, через какое-то время стало нехватать размерности элемента; нужно незабыть поменять везде типы; а если где-то забыл... Суть-то все-равно малоразличима. Было б наверное неплохо на уровне с sizeof иметь typeof, которая вернет размерность типа массива или numof, которая вернет количество элементов.
typeof есть :-) 21.08.06 15:13  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> все-равно малоразличима. Было б наверное неплохо на уровне
> с sizeof иметь typeof, которая вернет размерность типа
> массива или numof, которая вернет количество элементов.

typeof есть :-)
Правда называется typeid и предназначен для получения динамической информации ТОЛЬКО абстрактных типов.
Всю статическую информацию о типе можно вытащить при помощи шаблонов (посмотри например на stlport-овский stl/type_traits.h)
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach