информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеЗа кого нас держат?Страшный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Спасибо. Кул ;) 22.08.06 02:49  Число просмотров: 2344
Автор: 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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach