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

Код: 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
Вопрос по getenv("HOMEPATH")
    #39613320
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопрос по getenv("HOMEPATH")
    #39613399
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Код: plaintext
1.
	if (ptr=getenv("HOMEDRIVE"), NULL != ptr)




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

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



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

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



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

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



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

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



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

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

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



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

Лучше тоже попросить переменную окружения HOME.
...
Рейтинг: 0 / 0
Вопрос по getenv("HOMEPATH")
    #39613420
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда не пользовался такой конструкцией, поискал где она описана
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
Вопрос по getenv("HOMEPATH")
    #39613422
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДНу явно же начинающий сишник загрустит, спутав = и ==...

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

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

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

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

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


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

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




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

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

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


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

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


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


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

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

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


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

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

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

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

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

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

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


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

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

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

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


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