4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
||||||||||||||||
1 | ||||||||||||||||
Как использовать #undef или вообще не использовать10.09.2013, 13:11. Показов 2448. Ответов 8
Метки нет Все метки)
(
Посоветуйте какую лучше применить концепцию.
Хочу сделать в проекте унифицированные сообщения об ошибках в едином стиле. Чтобы они выглядели так:
0
|
|
10.09.2013, 13:11 | |
Ответы с готовыми решениями:
8
Как в VC++2008 использовать Framewok 2.0 или не использовать вообще?? Оставить все как есть || использовать парсер xml || или использовать struct
Rgb2gray как вообще это использовать? |
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|
10.09.2013, 17:07 | 2 |
А чем assert() не устраивает?
0
|
![]() 5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
11.09.2013, 15:14 | 3 |
tiger(), существует встроенный идентификатор __func__, генерируемый компилятором в теле каждой функции и содержащий строковое имя содержащей его функции.
1
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
12.09.2013, 06:32 | 4 | |||||
Препроцессор работает не в рантайме, а ещё до непосредственной компиляции.
Вручную ничего определять не надо, можно воспользоваться стандартными макросами __FILE__ и __LINE__ (ERROR_PREFIX можно передавать в качестве аргумента) вместе с идентификатором __func__, как предложил silent_1991. Для большего удобства всё это можно обернуть в макрос:
Код
~/samples/c $ bin/sample Error at /home/nameless/samples/c/main.c:test_fun:28 (code: 2 reason: "No such file or directory"): Opening "/there/is/no/such/file"...
0
|
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
|
16.09.2013, 07:29 [ТС] | 5 |
Во, такой макрос как раз то что надо. Только я не все понял здесь..
Во-первых зачем нужен do {} while (0), если можно просто написать этот кусок кода и он тоже выполнится один раз? Во-вторых я не понял откуда берутся переменные errno, errsv, чему они равны, здесь нигде не инициализируются. И еще - зачем в CHECH_ERRNO неопределенное количество аргументов?
0
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
16.09.2013, 07:41 | 6 | |||||
Это стандартная идиома при написании многострочных макросов. Объяснять, зачем тут do {} while(0), если честно, лень, я это уже делал здесь (читать комментарии). Ну или можешь загуглить «c multiline macro».
Символ errno объявляется в заголовочном файле errno.h. Он содержит код ошибки последней вызванной библиотечной функции (если ошибка была). errsv мы определяем сами. Там опечатка, должно быть CHECK_ERRNO. Зачем? Чтобы можно было эти аргументы вывести. Вывод производится по аналогии с функцией форматного вывода printf, которая принимает форматную строку и неопределённое число аргументов. Например, строку 19 можно было бы заменить на
Код
Error at /home/nameless/samples/c/main.c:test_fun:28 (code: 2 reason: "No such file or directory"): Opening "/there/is/no/such/file"...; my mood today is sad
0
|
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
||||||||||||||||
16.09.2013, 08:05 [ТС] | 7 | |||||||||||||||
Ага, сам почитаю, спасибо за ссылку
Я не уверен что мой код ошибки будет там находиться. Я отлаживаю такой код ошибки, который почти в каждой функции из моего API определен как локальная переменная int32_t например и возвращается по return. То есть я после таких функций имею переменную result условно говоря, которую проверяю на 0 - все хорошо или не0 - код ошибки. Вот что у меня получилось
В целом возможно два варианта ошибочных ситуаций: мы знаем что была ошибка и ее код или просто знаем что была ошибка. То есть в тексте после очередной функции API я хочу использовать
0
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
16.09.2013, 08:14 | 8 |
Это был просто пример. Естественно, твоего кода ошибки там не будет, и тебе нужно изменить errno на свою переменную.
1
|
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
|
16.09.2013, 08:52 [ТС] | 9 |
0
|
16.09.2013, 08:52 | |
16.09.2013, 08:52 | |
Помогаю со студенческими работами здесь
9
Локальная сеть предприятия. Использовать или не использовать AD, за и против? Смена настройки параметра сети (использовать или не использовать прокси-сервер для локальных подключений) Использовать или не использовать шаблонизатор smarty? Использовать или не использовать MasterPage Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |