Я хочу знать, почему strcmp()
возвращает разные значения, если используется более одного раза в одной и той же функции. Ниже представлена программа. В первом случае я знаю, почему он печатает -6. Но во втором случае, почему печатается -1?
#include<stdio.h>
#include<string.h>
int main()
{
char a[10] = "aa";
char b[10] = "ag";
printf("%d\n",strcmp(a, b));
printf("%d\n",strcmp("aa","ag"));
return 0;
}
И результат, который он производит, ниже
[sxxxx@bhlingxxx test]$ gcc -Wall t51.c
[sxxxx@bhlingxxx test]$ ./a.out
-6
-1
Почему выход второй strcmp()
-1? Здесь играет Компилятор? Если да, то какую именно оптимизацию он делает?
char* c="aa", *d = "ag";
даст тот же-6
. - person Duck Dodgers   schedule 15.02.2019-6 -6
. Только в GCC он возвращает-6 -1
. - person Duck Dodgers   schedule 15.02.2019strcmp()
при передаче литеральных строк в качестве параметров возвращает-1
, только для компилятора gcc. Во всех остальных случаях,char*
или массив символов или использование clang, он всегда возвращает -6. Я могу только сказать, что это кажется реализацией. Я просто проверял и констатировал очевидное.:)
. - person Duck Dodgers   schedule 15.02.2019:D
. Я снова и снова просматривал свои комментарии. Да, кажется, что единственная разница - это проверка во время выполнения и во время компиляции. Я думаю, поскольку компилятор уже знает, он останавливается раньше во время сравнения во время компиляции. - person Duck Dodgers   schedule 15.02.2019:)
- person Duck Dodgers   schedule 15.02.2019