Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: distance
Дата сообщения: 24.09.2007 17:43
Lihonosov
msdn ещё никто не отменял
Автор: Lihonosov
Дата сообщения: 25.09.2007 09:29

Цитата:
msdn ещё никто не отменял

В MSDN не нашел.
Автор: Mickey_from_nsk
Дата сообщения: 25.09.2007 11:58
А, например, так не пробовал?

Код:
...
sWriter.Writeline(file.FullName.ToString().Replace(@"\", @"\\");
...
Автор: Lihonosov
Дата сообщения: 25.09.2007 13:32

Цитата:
sWriter.Writeline(file.FullName.ToString().Replace(@"\", @"\\");


Спасибо!
Автор: topotuno
Дата сообщения: 05.10.2007 12:28
Есть ли у кого-нибудь описание кодов ошибок MS VC 6.0 или миниатюрный msdn (где-то здесь видел , но не могу найти)
Автор: TeXpert
Дата сообщения: 05.10.2007 17:13
topotuno
Смотри winerror.h, если не ошибаюсь.
Автор: Mr Nobody
Дата сообщения: 06.10.2007 09:27
TeXpert

Цитата:
Смотри winerror.h, если не ошибаюсь.

Вы не ошиблись, но там ведь ошибки API WIN32.
Кто мне подскажет средство языка Си для определения времени просчета задачи? Существуют ли они, эти возможности?
Автор: Qraizer
Дата сообщения: 06.10.2007 14:31
Всё, чем обеспечивает в данном отношении стандарт - это <time.h> - он же <ctime> для C++ - без _ впереди имён. Высокой точности (пока?) не получится, но для большиства задач это подходит. Для высокоточных измерений возможны только платформенно-зависимые решения, например, в том же Win32 есть QueryPerformanceCounter(), или даже аппаратно-зависимые, например, для x86 основанные на
Код: inline unsigned __int64 getTSR(void)
{
__asm rdtsc;
}
Автор: Mr Nobody
Дата сообщения: 06.10.2007 15:18
Qraizer

Цитата:
Всё, чем обеспечивает в данном отношении стандарт - это <time.h>

То есть, оставаясь в рамках языка Си, нет возможности измерить время с точностьью до милисекунды.
Спасибо.
Автор: Qraizer
Дата сообщения: 07.10.2007 18:49
Не совсем. Оставаясь в рамках языка Си, нет возможности измерить время с точностью выше 1/CLOCKS_PER_SEC. Чему равна константа CLOCKS_PER_SEC, стандарт не определяет. И это правильно, т.к. нельзя навязывать такие аппаратные особенности всем без исключения реализациям в мире. Если окажется, что она равна 1000, то получится и до миллисекунды.
Автор: Mr Nobody
Дата сообщения: 07.10.2007 19:08
Qraizer
На данный момент в Microsoft Visual C++ 6.0 1/CLOCKS_PER_SEC равна 0.001 или одной милисекунде. Так показала программа.
В файде time.h Microsoft Visual C++ 6.0 дано такое определение
#define CLOCKS_PER_SEC 1000

В файде time.h Borland C++ 4.52 дано такое определение
#define CLOCKS_PER_SEC 1000.0
#define CLK_TCK 1000.0

Автор: Lyrik
Дата сообщения: 08.10.2007 21:21
как можно реализовать выравнивание структур по стандарту? (что-то не нашел ) т.е. как сделать так, чтобы данный код компилился под Windows и *nix.

Код: #pragma pack(push)
#pragma pack(1)

struct s1
{
...
};
#pragma pack(pop)
Автор: tolyn77
Дата сообщения: 10.10.2007 15:20
Привет, Всем
извините заранее если не туда.
я в C++ не бельмеса не понимаю, хотел у сообщества спросить может ли кто нибудь откомпилировать исходник (StarDict Command line version http://stardict.sourceforge.net/other.php) под windows?
заранее благодарен
Автор: PDWORD
Дата сообщения: 10.10.2007 15:32
Lyrik, а разве приведенные прагмы непереносимы с виндоус на юникс?

Добавлено:
А у меня вопрос, существуют ли конвероторы ассемблерных вставок из того формата, в котором они приняты в windows ( __asm{ ... } ) в тот, что понимает юниксовый gcc?
Автор: WiseAlex
Дата сообщения: 10.10.2007 16:26
Lyrik
насколько я помню в стандарте по поводу выравнивания все отдано на implemetation specific
с одной стороны pragma pack встречается на разных платформах, с другой есть условная компиляция - вставляй какие надо прагмы в зависимости о компилятора
Автор: Lyrik
Дата сообщения: 10.10.2007 20:57
PDWORD

Цитата:
а разве приведенные прагмы непереносимы с виндоус на юникс?

Переносимы, но если юзать MSVC и gcc. Вот меня и интересовал вопрос о переносимости с точки зрения стандарта
WiseAlex
спасибо!
Автор: Antananarivu
Дата сообщения: 13.10.2007 13:27

Код: NMTMatrix::NMTMatrix(int N,int M)
{
nx=N;
mx=M;
data=(LDouble*)malloc(N*M*sizeof(LDouble));
for (int i=0; i < nx*mx; i++) data[i]=0;
}

NMTMatrix::NMTMatrix(const NMTMatrix& m)
{
data=(LDouble*)malloc(m.nx*m.mx*sizeof(LDouble));
nx=m.nx;
mx=m.mx;
memmove(data,m.data,nx*mx*sizeof(LDouble));
}
Автор: Mr Nobody
Дата сообщения: 13.10.2007 14:22
Antananarivu, моё мнение, так все 100%. Как я понимаю, вас смущает использование malloc всместо new, вполне. Даже лучше использовать calloc. А что за тип LDouble, это long double?
Автор: Antananarivu
Дата сообщения: 13.10.2007 14:36
Да LDouble - long double. Ну, не знаю. Я бы через массивы пошел, наверное.
Автор: Lyrik
Дата сообщения: 13.10.2007 14:49
Antananarivu

Цитата:
Это типично вообще?

имхно, нет. Поскольку если используются плюсы, то уж лучше все таки new. Но если и используется malloc, то как минимум надо проверять на NULL, иначе ошибок не избежать.
С точки зрения корректности еще надо поменять тип N и M, на что-то беззнаковое, конечно, если не планируется в данном классе такой доступ, как

Код: NMTMatrix matrix;
matrix[-1][-3] = 0;
Автор: Qraizer
Дата сообщения: 13.10.2007 15:29
Для С стиля это в общем-то нормально. Для С++ не типично, но приемлимо. Возможно, автору работать с одномерным массивом здесь удобнее, а может он просто не осилил динамические двумерные.
Автор: Antananarivu
Дата сообщения: 13.10.2007 15:37
Qraizer
Еще, например, у этого класса нет конструктора по умолчанию, это тоже нормально?
Еще в этом комплексе используется вот что:

Код: struct NewSatInit
{
    long id;
    char Nameobj[20];
    LDouble mu;
    ModelForc mfe;
    int Nvit;
    int refSysCodeIn;
    int TimeIn;
    long jt0;
    LDouble tj0;
    T3DVector rv0[2];
    LDouble epsTime;
    short PowerIntegr;
    short Flag_integr;
    LDouble v_epsTime;
    short v_PowerIntegr;
    ModelForc_Var* var;
    q_Var* v_q;
};
Автор: terminat0r
Дата сообщения: 13.10.2007 17:34

Цитата:
То есть структура у них - это не класс в полном понимании это слова ( с конструкторами, функциями и т.д.), а некое хранилище данных, которое потом загоняется в нужный класс или функцию. Это тоже, так скажем, нормальный стиль программирования?

Да
Автор: ItsJustMe
Дата сообщения: 14.10.2007 02:02
struct и class для C++ - синонимы. Различие между ними лишь в том, что у struct поля и функции по-умолчанию public, а у class - private.
Автор: Mr Nobody
Дата сообщения: 14.10.2007 08:29
Lyrik

Цитата:
Поскольку если используются плюсы, то уж лучше все таки new. Но если и используется malloc, то как минимум надо проверять на NULL, иначе ошибок не избежать.

1. При выделении памяти через new всегда вызывается конструктор, в данном случае вызывается пустой конструктор. С точки зрения оптимизации в данном случае луче malloc или сalloc. Ну, если malloc отказал в выделении памяти то и new откажет. Поэтому прверять нужно и тот и другой.
Автор: Lyrik
Дата сообщения: 14.10.2007 09:24
Mr Nobody

Цитата:
Ну, если malloc отказал в выделении памяти то и new откажет. Поэтому прверять нужно и тот и другой.

А где я писал, что если malloc не выделит, то new выделит?
Автор: Mr Nobody
Дата сообщения: 14.10.2007 09:40
Lyrik
Не надо придираться к словам. Вот ваши слова

Цитата:
Но если и используется malloc, то как минимум надо проверять на NULL, иначе ошибок не избежать.

Согласитесь. что не выдача new запрошенного блока памяти так же вероятно, как и выдача NULL функцией malloc(). Что такое вызов new? Это вызов malloc() и потом вызов конструктора.
Автор: Lyrik
Дата сообщения: 14.10.2007 13:30
Mr Nobody

Цитата:
Вот ваши слова

и? тут имеется ввиду вполне очевидные вещи: если malloc - то как минимум проверка на NULL, если new - это проверка NULL или bad_alloc.

Цитата:
Не надо придираться к словам.

начал не я
Автор: Mr Nobody
Дата сообщения: 14.10.2007 17:16
Lyrik
Как мне смутно вспоминается, по стандарту new не взвращает теперь при сбое NULL, а нужно использовать bad_alloc.

Цитата:
начал не я

И не я. Проверьте с самого начала. Я парень скромный и даже немного робкий.

Автор: Antananarivu
Дата сообщения: 15.10.2007 10:51
Задам еще несколько ламерских вопросов.
1. Я так понимаю тип long double сохраняет точность 18 знаков после запятой (поправьте, если не прав). Так вот допустим у меня такая ситуация:

Код: long double s,t;
t=3.1312312312312312;
int i;
i=2;
s=t*i;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.