Ожидается, что не только переменные статического типа хранения не будут инициализированы с возвращаемыми значениями функций, поскольку они не считаются константами? Идя по этому аргументу, это не следующее объявление, действительное в C.It компилируется без ошибок или предупреждений, и выход будет таким, как ожидалось.Может ли инициализироваться внутренние функции с возвращаемым значением функций? «Int arr [2] = {strcmp (« a »,« a »), strcmp (« 3 »,« 5 »)}; верный?
#include <stdio.h>
#include <string.h>
int main()
{
int arr[2]={strcmp("a","a"),strcmp("3","5")};
printf("%d,%d",arr[0],arr[1]);
}
Result
0, -1
Это объяснение. любой массив, следующий за b y = {, будет устанавливать индексы массива в значения. strcmp возвращает разницу между строками, так что это то, что попадает в массив. Его не статично, потому что он находится в основном стеке стека. – Magn3s1um
Nitpicky, это должно быть 'int main (void)'. В противном случае в коде нет ничего плохого. (Выход может быть другим, получение «0, -2» будет еще одним общим выходом. Все, что стандартные гарантии, это то, что 'arr [1]' является отрицательным.) –