Работа в новой для меня базовый код, и я наткнулся на какой-C код, который выглядит следующим образом:Когда я использовал /define для определения статической функции в работе C?
static int* functionA(int* anInt);
#define functionA(anInt) (<a 1 line '? :' function>)
Может быть, это очевидно для людей, которые по кодированию C является немного более свежим в их голове, чем у меня, но для меня это немного странно. Компилятор, похоже, согласен, как он выплевывает сообщение о
error: ‘functionA’ declared ‘static’ but never defined.
(я использую GCC 4.8.2.)
Как это получилось в какой-нибудь библиотеки кода, который мы оцениваем я полагаю, что для некоторых компиляторов некоторое время это действительно. Пожалуйста, кто-нибудь может объяснить, когда это действительно так?
Мое лучшее предположение - это какой-то старомодный способ делать встроенные определения статических функций. Однако есть все шансы, что я упускаю что-то тонкое. Объяснение того, что достигается, также будет полезно, но на самом деле я хочу знать, когда этот код действителен.
Параметр '# define' вещь является определение макроса препроцессор, а не определение функции. Затем предварительный процессор заменит все экземпляры 'functionA' (все экземпляры, найденные после определения макроса) на« тело »макроса. Определение функции будет, например, 'static int * functionA (int * anInt) {...}' –
https://ideone.com/hDFhbJ показывает, что gcc не имеет проблем с компиляцией кода с неопределенной функцией, которая была объявлена ранее. У вас должен быть экземпляр, где 'functionA' * is * вызывается через какой-то механизм или что-то еще. Предоставьте минимальный полный пример ... –
Далее в том же файле .c есть: int * aValue = functionA (aVariable); Хотя я не понимаю, почему этого не может быть: int * aValue = (); предоставляется макросом. – TafT