Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по getenv("HOMEPATH") / 25 сообщений из 27, страница 1 из 2
12.03.2018, 11:45
    #39613306
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Есть такая фукнция, сдается мне она не всегда корректно может работать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
static void
generate_homefile(const char *prefix, char *filename, size_t filenamelen)
{
	char	dir[PATH_MAX];
#ifdef	WIN32
	const char *ptr;

	dir[0] = '\0';
	if (ptr=getenv("HOMEDRIVE"), NULL != ptr)
		strlcat(dir, ptr, filenamelen);
	if (ptr=getenv("HOMEPATH"), NULL != ptr)
		strlcat(dir, ptr, filenamelen);
#else
	STRCPY_FIXED(dir, "~");
#endif /* WIN32 */
	generate_filename(dir, prefix, filename, filenamelen);

	return;
}



Покритикуйте, если не прав:
1. Не всегда могут быть HOMEDRIVE, HOMEPATH
2. В некоторых случаях PATH_MAX(=260) может быть недостаточно
...
Рейтинг: 0 / 0
12.03.2018, 11:54
    #39613320
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
...
Рейтинг: 0 / 0
12.03.2018, 13:26
    #39613399
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Ролг Хупин
Код: plaintext
1.
	if (ptr=getenv("HOMEDRIVE"), NULL != ptr)




Кто ж тебя так писать учил?
Ты NULL проверяешь, или ptr ?
NULL -- это константа, зачем её проверять?
...
Рейтинг: 0 / 0
12.03.2018, 13:30
    #39613402
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Ролг Хупин,

Код: plaintext
1.
if ( (ptr=getenv("HOMEDRIVE")) != NULL )



или, ещё лучше,

Код: plaintext
1.
if ( ptr=getenv("HOMEDRIVE") )



Не, не умеешь так ?
...
Рейтинг: 0 / 0
12.03.2018, 13:35
    #39613406
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
MasterZiv...
или, ещё лучше,

Код: plaintext
1.
if ( ptr=getenv("HOMEDRIVE") )



Не, не умеешь так ?
Ну явно же начинающий сишник загрустит, спутав = и ==...

Не нагляднее ли в две строчки?
Код: plaintext
1.
2.
ptr=getenv("HOMEDRIVE");
if (pt)
...
Рейтинг: 0 / 0
12.03.2018, 13:40
    #39613411
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
чччД
Не нагляднее ли в две строчки?



Ну, товарищ же хочет В ОДНУ СТРОКУ...
...
Рейтинг: 0 / 0
12.03.2018, 13:40
    #39613412
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Ролг ХупинПокритикуйте, если не прав:
1. Не всегда могут быть HOMEDRIVE, HOMEPATH
2. В некоторых случаях PATH_MAX(=260) может быть недостаточно

Тебе с твоей макосью это сугубо без разницы. Если ты не заметил, там стоит "#ifdef WIN32".
Что тебе должно не нравиться, так это использование тильды, которая автоматически в
домашний каталог разворачивается командным интепретатором, но не системными функциями
класса fopen().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.03.2018, 13:44
    #39613419
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Ролг Хупин,

Код: plaintext
1.
STRCPY_FIXED(dir, "~");



~ понимают только шелы, если ты такой путь запихнёшь в
fopen() оно скорее всего не поймёт.

Лучше тоже попросить переменную окружения HOME.
...
Рейтинг: 0 / 0
12.03.2018, 13:44
    #39613420
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Никогда не пользовался такой конструкцией, поискал где она описана
http://www.cplusplus.com/doc/tutorial/operators/ The comma operator (,) is used to separate two or more expressions that are included where only one expression is expected. When the set of expressions has to be evaluated for a value, only the right-most expression is considered.

For example, the following code:
a = (b=3, b+2);

would first assign the value 3 to b, and then assign b+2 to variable a. So, at the end, variable a would contain the value 5 while variable b would contain value 3.
Т.е. внутри if() запятая равнозначна &&, как следствие код избыточен, выделенное лишняя проверка
Код: plaintext
1.
if (ptr=getenv("HOMEDRIVE"), NULL != ptr)
...
Рейтинг: 0 / 0
12.03.2018, 13:45
    #39613422
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
чччДНу явно же начинающий сишник загрустит, спутав = и ==...

Если кто забыл, Ролг копает ODBC драйвер к PostreSQL, который разрабатывался студентами
Беркли. Там может быть код абсолютно любой степени извращённости.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.03.2018, 13:47
    #39613426
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Ролг ХупинЕсть такая фукнция, сдается мне она не всегда корректно может работать

Покритикуйте, если не прав:
1. Не всегда могут быть HOMEDRIVE, HOMEPATH
2. В некоторых случаях PATH_MAX(=260) может быть недостаточно

Ну всё да, но только я не очень понял чего тут неправильного и некорректного,
и в чём вообще смысл этой функции...

Может тебе tmpfile() надо?
...
Рейтинг: 0 / 0
12.03.2018, 14:14
    #39613455
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Dimitry SibiryakovчччДНу явно же начинающий сишник загрустит, спутав = и ==...

Если кто забыл, Ролг копает ODBC драйвер к PostreSQL, который разрабатывался студентами
Беркли. Там может быть код абсолютно любой степени извращённости.


спасибо, добрый человек

да, это не я писал там специальные пацаны лабают.
Я наоборот, пытаюсь понять, где могут быть пробои в коде реальной жизни.
...
Рейтинг: 0 / 0
12.03.2018, 14:16
    #39613457
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
MasterZivРолг Хупин
Код: plaintext
1.
	if (ptr=getenv("HOMEDRIVE"), NULL != ptr)




Кто ж тебя так писать учил?
Ты NULL проверяешь, или ptr ?
NULL -- это константа, зачем её проверять?

а что - в этой конструкции есть разница?
...
Рейтинг: 0 / 0
12.03.2018, 14:18
    #39613462
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Dimitry SibiryakovРолг ХупинПокритикуйте, если не прав:
1. Не всегда могут быть HOMEDRIVE, HOMEPATH
2. В некоторых случаях PATH_MAX(=260) может быть недостаточно

Тебе с твоей макосью это сугубо без разницы. Если ты не заметил, там стоит "#ifdef WIN32".
Что тебе должно не нравиться, так это использование тильды, которая автоматически в
домашний каталог разворачивается командным интепретатором, но не системными функциями
класса fopen().


так задача в том, чтобы оно и под маком работало, и под виндоуз оставалось работоспособным.
...
Рейтинг: 0 / 0
13.03.2018, 13:39
    #39614092
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Dima TНикогда не пользовался такой конструкцией, поискал где она описана

Ёмаё, ты, старый С-шник, и не знал за запятую ? Позор, ящитаю...
...
Рейтинг: 0 / 0
13.03.2018, 13:41
    #39614094
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Dima TТ.е. внутри if() запятая равнозначна &&, как следствие код избыточен, выделенное лишняя проверка


Нет, ни в коем случае запятая не равнозначна &&
...
Рейтинг: 0 / 0
13.03.2018, 13:43
    #39614097
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Ролг ХупинMasterZivпропущено...


Кто ж тебя так писать учил?
Ты NULL проверяешь, или ptr ?
NULL -- это константа, зачем её проверять?

а что - в этой конструкции есть разница?

Огромная. NULL проверять бессмысленно.
Так пишут только Java-телепузики, которым внушили страх перед путаньем == и = ...
...
Рейтинг: 0 / 0
13.03.2018, 14:18
    #39614131
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
MasterZivDima TТ.е. внутри if() запятая равнозначна &&, как следствие код избыточен, выделенное лишняя проверка


Нет, ни в коем случае запятая не равнозначна &&
Точно, неправильно понял описание.

PS У меня немного практики на С/С++, в чужих исходниках не довелось копаться, а в книгах запятая встречается только при объявлении переменных.
...
Рейтинг: 0 / 0
13.03.2018, 14:37
    #39614143
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
MasterZivРолг Хупинпропущено...
а что - в этой конструкции есть разница?

Огромная. NULL проверять бессмысленно.
Так пишут только Java-телепузики, которым внушили страх перед путаньем == и = ...

Никакой разницы, совершенно: для "==" не важен порядок операндов.
И никто NULL и не проверял, с чего ты взял.

И да, многие "руководства" рекомендуют при сравнении "на равно" с константой, константу ставить на первое место.

Непонятно, что ты так возбудился.
...
Рейтинг: 0 / 0
13.03.2018, 14:47
    #39614153
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
чччДИ да, многие "руководства" рекомендуют при сравнении "на равно" с константой, константу ставить на первое место.
Это все равно как если бы "многие" рекомендовали все время ходить в каске, потому что в любой момент на голову кирпич может упасть
...
Рейтинг: 0 / 0
13.03.2018, 14:58
    #39614159
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Anatoly MoskovskyчччДИ да, многие "руководства" рекомендуют при сравнении "на равно" с константой, константу ставить на первое место.
Это все равно как если бы "многие" рекомендовали все время ходить в каске, потому что в любой момент на голову кирпич может упасть
ИМХО данное правило актуально для защиты от опечаток.

Например MSVC2015 по умолчанию не выдает ворнинг на такую конструкцию
Код: plaintext
1.
if(ptr = NULL) ...


правда если в настройках переключить на Level4(/W4) то начнет выдавать.
...
Рейтинг: 0 / 0
13.03.2018, 15:09
    #39614163
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Anatoly MoskovskyчччДИ да, многие "руководства" рекомендуют при сравнении "на равно" с константой, константу ставить на первое место.
Это все равно как если бы "многие" рекомендовали все время ходить в каске, потому что в любой момент на голову кирпич может упасть
Вот придет к тебе толпа студентов-опездалов, покодят пару месяцев - не только про каску вспомнишь, а и про бронежилет.
Если кирпичи падают - каска к месту. Если человек считает, что такой прием позволяет избегать глупых и ошибок - пусть использует.
Многие вот тесты пишут, а кто-то считает это пустой тратой времени.
Это ведь хорошо, когда можно и так и эдак. Главное, чтобы создаваемый функционал соответствовал задаче.
...
Рейтинг: 0 / 0
13.03.2018, 15:22
    #39614169
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
чччДНепонятно, что ты так возбудился.глаза болят читать такое
...
Рейтинг: 0 / 0
13.03.2018, 16:21
    #39614207
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
чччД....

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

egorychглаза болят читать такое
+
...
Рейтинг: 0 / 0
13.03.2018, 16:46
    #39614228
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по getenv("HOMEPATH")
Leonid Kudryavtsev,

Что за фантазии.
Вот где я про читаемость кода писал, конкретно?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по getenv("HOMEPATH") / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]