2013-05-14 2 views
2

Ожидается, что не только переменные статического типа хранения не будут инициализированы с возвращаемыми значениями функций, поскольку они не считаются константами? Идя по этому аргументу, это не следующее объявление, действительное в 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]); 
} 

Result0, -1

+0

Это объяснение. любой массив, следующий за b y = {, будет устанавливать индексы массива в значения. strcmp возвращает разницу между строками, так что это то, что попадает в массив. Его не статично, потому что он находится в основном стеке стека. – Magn3s1um

+0

Nitpicky, это должно быть 'int main (void)'. В противном случае в коде нет ничего плохого. (Выход может быть другим, получение «0, -2» будет еще одним общим выходом. Все, что стандартные гарантии, это то, что 'arr [1]' является отрицательным.) –

ответ

0

Утверждение, что статические переменные не могут делать ставки инициализируется возвращаемые значения функций верно, но в вашем Exemple, аранжировка не является статической переменной, но переменная хранится в стеке, поэтому этот фрагмент кода полностью действителен.

С другой стороны, сочинительство:

static int arr[2]={strcmp("a","a"),strcmp("3","5")}; 

будет незаконным, по причинам, вы объяснили.

 Смежные вопросы

  • Нет связанных вопросов^_^