@pepl213

Как разобрать код SimpleTerminal?

Начал разбирать код SimpleTerminal и возникло несколько недопониманий.
1) Почему изначально файл называется config.def.h, а в Makefile есть строчки
config.h:
	cp config.def.h config.h

Зачем?
2) В файле arg.h есть такой define, который разбирает аргументы
/* use main(int argc, char *argv[]) */
#define ARGBEGIN	for (argv0 = *argv, argv++, argc--;\
					argv[0] && argv[0][0] == '-'\
					&& argv[0][1];\
					argc--, argv++) {\
				char argc_;\
				char **argv_;\
				int brk_;\
				if (argv[0][1] == '-' && argv[0][2] == '\0') {\
					argv++;\
					argc--;\
					break;\
				}\
				int i_;\
				for (i_ = 1, brk_ = 0, argv_ = argv;\
						argv[0][i_] && !brk_;\
						i_++) {\
					if (argv_ != argv)\
						break;\
					argc_ = argv[0][i_];\
					switch (argc_)

#define ARGEND			}\
			}

// В x.c используется так 
int main(int argc, char *argv[])
{ ...
	ARGBEGIN {
	case 'a':
		allowaltscreen = 0;
		break;
	case 'c':
		opt_class = EARGF(usage());
		break;
	case 'e':
		if (argc > 0)
			--argc, ++argv;
		goto run;
	case 'f':
		opt_font = EARGF(usage());
		break;
	case 'g':
		xw.gm = XParseGeometry(EARGF(usage()),
				&xw.l, &xw.t, &cols, &rows);
		break;
	case 'i':
		xw.isfixed = 1;
		break;
	case 'o':
		opt_io = EARGF(usage());
		break;
	case 'l':
		opt_line = EARGF(usage());
		break;
	case 'n':
		opt_name = EARGF(usage());
		break;
	case 't':
	case 'T':
		opt_title = EARGF(usage());
		break;
	case 'w':
		opt_embed = EARGF(usage());
		break;
	case 'v':
		die("%s " VERSION "\n", argv0);
		break;
	default:
		usage();
	} ARGEND;
....
}
Что? Зачем?
Почему argv[0] && argv[0][0] == '-'&& argv[0][1]; проверяют первый символ (файла?) на '-'?
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 2
BacCM
@BacCM
C++ почти с рождения
1) Возможно это происходит при каких-то опциях компиляции? Типа берется некий дефолтный файл, а в других случаях какой-то иной.

2) Потому что там сразу первым делом argv++
Ответ написан
@q27off
1) Очевидно, если нет файла config.h (цель не достигнута), создается дефолтный config-файл.

2) Проверяется не первый символ файла, а корректность формата переданных аргументов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы