Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 160 161 162 [ 163 ] 164 165 166 ... 210


int OwlMain(int /*argc*/, char* /*argv*/[]) int res;

TRY res = App().Run();

CATCH((xmsg &s)

Какие хочешь ексепшены MessageBox(NULL, Message , s.c str()); return res;

Почему иногда пытаешься проинспектировать переменную в BC++ во время отладки, а он ругается на inactive scope?

Вот пример отлаживаемой программы. Компилим так:

bcc -v is.cpp

=== Cut ===

#include <iostream.h>

void a()

int b = 7;

cout << b << endl;

void main()

a();

=== Cut ===

Входим в TD. Нажимаем F8, оказываемся на строке с вызовом a(). Пытаемся inspect b. Естественно, не находим ничего. А теперь перемещаем курсор в окне исходника на строку с cout, но трассировкой в a() не входим и пробуем посмотреть b. И вот тут-то и получаем inactive scope.

Были у меня две структуры подобные, но вторая длиннее. Сначала в функции одна была, я на ней отлаживался, а потом поменял на вторую, да только в таНосе, где sizeof(struct ...) старое оставил, и налезали у меня данные на следующий кусок хипа

Для избегания подобной баги можно в Си сымитировать

Сиплюсный new:

#define tmalloc(type) ((type*)malloc(sizeof(type))) #define amalloc(type, size) ((type*)malloc(sizeof(type) *

(size)))

Более того, в последнем define можно поставить (size) + 1, чтобы гарантированно избежать проблем с завершающим нулём в строках.

Можно сделать иначе. Поскольку присвоение от malloc() как правило делают на стилизованную переменную, то нужно прямо так и писать:



body = malloc(sizeof(*body));

Теперь вы спокойно можете менять типы не заботясь о malloc(). Ho это верно для Си, который не ругается на присвоение void* к type* (иначе пришлось бы кастить поинтер, и компилятор изменения типа просто не пережил бы).

Вообще в Си нет смысла ставить преобразования от void* к указательному типу явно. Более того, этот код не переносим на C++ - в проекте стандарта C++ нет malloc() и free(), а в некоторых компиляторах их нет даже в hosted С++ заголовках.

Проще будет:

#ifdef cplusplus

# define tmalloc(type) (new type)

# define amalloc(type, size) (new type[size])

#else

# define tmalloc(type) malloc(sizeof(type))

# define amalloc(type, size) malloc(sizeof(type) * (size)) #endif

Суммируя вышеперечисленное, можно отметить следующее. Необходимо скомбинировать все варианты:

#ifdef cplusplus

# define tmalloc(type) (new type)

# define amalloc(type, size) (new type[size])

# define del(var) delete(var) #else

# define tmalloc(type) ((type*)malloc(sizeof(type)))

# define amalloc(type, size) ((type*)malloc(sizeof(type) *

(size)))

# define del(var) free(var)

# define vmalloc(var)

((var) = malloc(sizeof(*(var)))) #endif

Я не понимаю, почему выдаются все файлы, вроде указал, что мне нужны только c атрибутом директория? Можно, конечно, проверять ff attrib, что нашли findfirst и findnext, но это мне кажется не выход. Может я что не дочитал или не понял?

done = findfirst( *.* , &onlydir, FA DIREC);

while(!done)

cout << onlydir.ff name << endl;



done = findnext(&onlydir); Это не баг, это фича MS DOS. Если атрибут установлен, то находятся как файлы с установленным атрибутом, так и без него. Если не установлен, то находятся только файлы без него. И проверять ff attrib вполне выход. Вы не дочитал хелп про findfirst/findnext.

Создается файл: fopen(FPtr, w ). Как может случиться, что структура пишется на диск некорректно?

fopen (FPtr, wb );

Режим не тот...

При печати функцией cprintf в позицию экрана x = 80, y = 25 происходит автоматический перевод строки (сдвиг всего экрана на строку вверх и очистка нижней строки) и это знакоместо так и остается пустым. Может кто знает, как вывести символ в это знакоместо?

Нажмите Ctrl+F1 на слове wscroll в Борландовском IDE.

Правда, printf это не вылечит, так как его вывод идёт не через

борландовскую библиотеку.

Как очистить текстовый экран в стандарте ANSI C?

Никак, в ANSI C нет понятия экрана и текстового режима. В Turbo Си так:

#include <conio.h>

void main(void) clrscr();

Можно также попробовать в1давать ANSI ESC-коды или сделать следующее:

#include <stdio.h> #define NROWS 2*25 /*

Чтобы обработать случай курсора в первой строке:

void main(void) short i;

for(i = 0; i < NROWS; puts( );

Ho это совершенно негарантированные способы.

Используя прерывания VESA, пытаюсь подключить мышь и вот тут начинается сумасшедший дом... Что делать?

Мышиный драйвер не знает какой у вас на данный момент

видео-режим и использует параметры предыдущего режима (у вас

он наверное текстовый - там мышь скачет дискретно по 8).



1 ... 160 161 162 [ 163 ] 164 165 166 ... 210

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика