Я просто сделал простую функцию, которая возвращает длиннее введенных символов и печатает их на консоли. Я ожидал некоторую форму ошибки сегментации, когда оба символа равны, но каждый раз он печатает второй символ *. Является ли это формой оптимизации компилятора или я что-то упускаю?Оптимизация компилятора для возвращаемого значения?
Пример ввода: ./longer test test
выдает второй «тест» (argv [2]).
Пробовал как clang, так и gcc из любопытства, тот же результат.
#include<stdio.h>
char* longer(char *, char *);
int main(int argc, char *argv[]) {
printf("%s", longer(argv[1], argv[2]));
return 0;
}
char* longer(char* s1, char* s2) {
char *first, *second;
for(first = s1, second = s2; *s1 && *s2; s1++, s2++);
return *s1 > *s2 ? first : second;
}
Для получения разъяснений, тем дольше функция сравнения значений ASCII текущей позиции, в связи с петлей на нарушения нулевого байта. По сути, сравнение было бы 0> 0, правильно?
поведение вы видите это хорошо, но ваше предположение не является правильным. '0> 0' является ложным, поэтому' second' сохраняется – VoidPointer
Ahh, ничего себе, я вижу свет, я не знаю, почему я был раздутым в течение последних 20 минут. Спасибо, глупый вопрос. –
'return * s1? second: first; 'обеспечивает более простое сравнение. – kfsone