Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | |
Хехе 03.09.02 21:37 Число просмотров: 1006
Автор: PS <PS> Статус: Elderman
|
А теперь напиши свой макрос так, что бы возвращать не 55, а то что вернула ф-ия, в макросе объявленная как "a". Причем второй раз её вызывать НЕЛЬЗЯ :)
То что человек пытается спросить - это анрил. Для таких целей есть ф-ии, и инлайн ф-ии.
> Vo blia vse nado razzhevat`. > bot primer: > > #define test( a ) a?GetLastError():55
>
> void main()
> {
> int i;
> i = test(1);
> i = test(0);
> }
> ---
|
<programming>
|
[C++] А возможно ли написать такой макрос: 01.09.02 04:12
Автор: Бяша <Biasha> Статус: Member Отредактировано 01.09.02 09:23 Количество правок: 1
|
Я макросы писать не умею, так как начал учить С, когда С уже не было, а был С++, а в нём не принято их писать :)
Но очевидно средствами с++ то, что я хочу, не сделать:
Хочется ускорить проверку возвращаемого функциями значения, что бы не писать каждый раз:
HANDLE heap = GetProcessHeap();
if (heap == NULL)
{
DWORD e = GetLastError();
char *str = new char[256];
strintf(str, "%s:%d\nGetProcessHeap:%d",_FILE__LINE_ e);
throw str;
}
Запихнув код в класс довёл до:
HANDLE heap = GetProcessHeap();
if (heap == NULL)
throw CError("GetProcessHeap", GetLastError(),_FILE__LINE_;
Если ещё и макрос написать, можно добиться:
HANDLE heap = GetProcessHeap();
if (heap == NULL)
throwe("GetProcessHeap");
На этом мои идеи исчерпались. А хочется так:
HANDLE heap = chf(NULL, GetProcessHeap());
---
То есть нужно чтобы макрос, проверил возвращаемое функцией значение.
Если оно равно указанному первым параметром значению - вызвал throw, передав класс, содержащий всю информацию об ошибке в catch.
А если не равно - вернул это значение.
Причём просто проверку возвращаемого значения я сделать могу:
#define chf(fail, func) if ((func) == (fail)) throw CError(#func, GetLastError(),_FILE__LINE_; else;
Но иногда мне нужно возвращаемое функцией значение.
|
|
Ну и какие проблеммы ? 01.09.02 22:41
Автор: PS <PS> Статус: Elderman
|
> Причём просто проверку возвращаемого значения я сделать > могу: > #define chf(fail, func) if ((func) == (fail)) throw > CError(#func, GetLastError(),_FILE__LINE_; else; > Но иногда мне нужно возвращаемое функцией значение.
#define chf( f, n, r ) \
{ \
int a = n; \
if( a == f ) throw; \
else r = a; \
}
Если же ты хочешь, что бы макрос работал как ф-ия и ты бы писал r = chf();
то обломись.
|
|
[C++] А возможно ли написать такой макрос: 01.09.02 06:56
Автор: + <Mikhail> Статус: Elderman
|
operator ?:
> Я макросы писать не умею, так как начал учить С, когда С > уже не было, а был С++, а в нём не принято их писать :) > Но очевидно средствами с++ то, что я хочу, не сделать: > > Хочется ускорить проверку возвращаемого функциями значения, > что бы не писать каждый раз: > > > HANDLE heap = GetProcessHeap();
> if (heap == NULL)
> {
> DWORD e = GetLastError();
> char *str = new char[256];
> strintf(str, "%s:%d\nGetProcessHeap:%d",_FILE_
>_LINE_ e);
> throw str;
> }
>
> Запихнув код в класс довёл до:
>
> HANDLE heap = GetProcessHeap();
> if (heap == NULL)
> throw CError("GetProcessHeap", GetLastError(),
>_FILE__LINE_;
>
> Если ещё и макрос написать, можно добиться:
>
> HANDLE heap = GetProcessHeap();
> if (heap == NULL)
> throwe("GetProcessHeap");
>
> На этом мои идеи исчерпались. А хочется так:
>
> HANDLE heap = chf(NULL, GetProcessHeap());
> ---
> То есть нужно чтобы макрос, проверил возвращаемое функцией > значение. > Если оно равно указанному первым параметром значению - > вызвал throw, передав класс, содержащий всю информацию об > ошибке в catch. > А если не равно - вернул это значение. > > Причём просто проверку возвращаемого значения я сделать > могу: > #define chf(fail, func) if ((func) == fail) throw > CError(#func, GetLastError(),_FILE__LINE_ else; > Но иногда мне нужно возвращаемое функцией значение.
|
| |
[C++] А возможно ли написать такой макрос: 01.09.02 09:19
Автор: Бяша <Biasha> Статус: Member
|
> operator ?:
Ну и?
А чем, он, собственно, лучше if else?
Навсякий случай явно обращу внимание на то, что хочется ещё и имя (либо имя и параметры) функции, вернувшей ошибку, получить. Вот как я написал в самом конце корневого сообщения. Но там значение функции не нужно.
|
| | |
[C++] А возможно ли написать такой макрос: 03.09.02 21:23
Автор: + <Mikhail> Статус: Elderman
|
Vo blia vse nado razzhevat`.
bot primer:
#define test( a ) a?GetLastError():55
void main()
{
int i;
i = test(1);
i = test(0);
}
---
|
| | | |
Хехе 03.09.02 21:37
Автор: PS <PS> Статус: Elderman
|
А теперь напиши свой макрос так, что бы возвращать не 55, а то что вернула ф-ия, в макросе объявленная как "a". Причем второй раз её вызывать НЕЛЬЗЯ :)
То что человек пытается спросить - это анрил. Для таких целей есть ф-ии, и инлайн ф-ии.
> Vo blia vse nado razzhevat`. > bot primer: > > #define test( a ) a?GetLastError():55
>
> void main()
> {
> int i;
> i = test(1);
> i = test(0);
> }
> ---
|
|
|