LINUX.ORG.RU

Помогите с дизайном функции (С/С++)


0

0

Мне нужна функция типа int readParameter (const char *iParamName...), которая парсирует и читает параметер из файла (любое целое число является законным). Нужен меxанизм проверки ошибок.
Вариант А: int readParameter (const char *iParamName, bool & iSuccessStatus), тогда можно делать:

bool success;
int p=readParameter("BLAH", success);
if(!success){
cerr<<"херня случилась\n";
}
....

вариант Б: bool readParameter(const char* iParamName, int& iParam), и тогда:

int p;
if(!readParameter("BLAH")){
cerr<<"херня случилась\n";
}
.....

Возможен вариант в котором функция возвращает указатель, и проверять этот указатель на NULL, но очень не хочется возиться с поинтерами.
Подскажите, какой из вариантов предпочтителен
Спасибо

anonymous

извиняюсь, в варианте Б, вызов функции выглядит так:
if(!readParam("BLAH", p))

anonymous
()

Как правило, возвращаемое значение сигнализирует об ошибке, а булевские значения в качестве аргументов ф-ции устанавливают всевозможные флаги. И вызывающий такую ф-цию код выглядит гораздо более читаемым. Поэтому 2 вариант.

seiken ★★★★★
()

Судя по коду ты юзаешь именно C++. Для обработки именно таких ситуаций в
 этом языке существует механизм исключений. Зацени. 

#include <iostream>

using namespace std;

// .... 

struct my_exception
{
	
	inline const char * what() 
	{
		static const char shit_happens[]="shit happens!";
		                                                	
		return shit_happens;
	}
};

int readParam (const char * a_pchName) throw (my_exception&) 
{
	// ....

 	if (something_wrong) throw my_exception();

	// ....
}


int main()
{
	try {

                readParam("i");
			 	
	}
	catch (my_exception & e) { cerr<<e.what()<<endl; }
}

ukez
()
Ответ на: комментарий от ukez

у исключений есть свои недостатки. Посмотрите, к примеру, это:
http://www.joelonsoftware.com/items/2003/10/13.html
(я не утверждаю, что исключения являются злом, я просто говорю, что и у них есть недостатки, и что я их не люблю и не советую ими пользоваться)


anonymous
()

еще можно

struct {
        int  result;
        bool success;
} readParameter(const char *iParamName...);

так симметричнее :)

idle ★★★★★
()
Ответ на: комментарий от anonymous

нет, возвращение структур (struct, pair, tuple, whatever) не удобно: нужен лишний тип, плохо читается, некрасиво

anonymous
()
Ответ на: комментарий от anonymous

> у исключений есть свои недостатки.

Безусловно исключения, как и многие другие возможности С++ (вроде перегрузки операторов, шаблонов, множетсвенного наследования и т.д.) являются опасным средством с помошью которого можно "запутать" программный код до такой сетепни, что поддержка и доработка его станут просто невозможными. Однако на мой взгляд, если подходить к их использованию обдумано, аккуратно, последовательно ( а именно так вегда и надо делать ), то они способны заметно упростить написание кода и улучшить его читабельность. По крайней мере в данном случае точно помогут =)

ukez
()
Ответ на: комментарий от anonymous

>я их не люблю и не советую ими пользоваться

кiса куку :)

Sveta_F
()

Я знаю что тебе точно поможет с дизайном функции ---

ДИАГОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ

anonymous
()

Чуть не забыл надо включать

#pragma optimize (code_horizontal) #pragma optimize (code_vertical)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.