2016-03-13 4 views
0

В исходном коде мерзавец, я увидел следующее определение функциифункция Const в C

const char *typename(unsigned int type) 
{ 
    if (type >= ARRAY_SIZE(object_type_strings)) 
     return NULL; 
    return object_type_strings[type]; 
} 

Я считал, что typename функция здесь, но, кажется, быть в const функции, которая является очень запутанной для меня ,

Что это значит и как использовать эту функцию функции const?

ссылка на исходную треску; https://github.com/git/git/blob/7d722536dd86b5fbd0c0434bfcea5588132ee6ad/object.c#L29

+3

Это функция, которая возвращает 'const char *'. (Иначе, чем 'static', который является атрибутом функции,' const' определяет тип возврата здесь.) –

+1

Вы разбираете его неправильно - это просто функция, которая возвращает 'const char *'. –

ответ

4

Использование cdecl

% cdecl 
cdecl> explain const char *typename(unsigned int) 
declare typename as function (unsigned int) returning pointer to const char 

Это полезный инструмент иногда, но она довольно ограничена, например, он сказал

cdecl> explain const char *typename(unsigned int foo); 
syntax error 

Но это очень полезно при попытке понять функциональные указатели:

cdecl> declare a as pointer to function (int, double, pointer to const char) 
     returning pointer to const volatile struct foo 
const volatile struct foo *(*a)(int , double , const char *) 

или

cdecl> explain const void *(*b[])(int , char (*(*)(char))(double)) 
declare b as array of pointer to function (int, pointer to function (char) returning pointer 
to function (double) returning char) returning pointer to const void 
+0

wow, удивительный инструмент! Должен знать об этом раньше! THX так много! – Bob

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