LINUX.ORG.RU

Си, объявление static-функций


1

1

В Си-файле есть обычные функции и объявленые как 'static'.

Есть необходимость в соответствующем заголовочном файле
иметь прототипы статических функций:

a.c:
#include "a.h"
static void func (...)
{
}

a.h:
static void func (...);


Файл a.h включается в b.h:
b.h:
#include "a.h"


На это компилятор ругается следующим образом:

warning: 'func' declared 'static' but never defined

Выходит, использовать объявление статической функции
в общедоступном файле нельзя, и в a.c все функции
должны идти в порядке их возможного вызова друг другом
снизу вверх? Или объявлять их в a.c?
★★★★★

Ответ на: комментарий от mv

да и в Си++ тоже:) одно и то же ключевое слово имеет разные смыслы в разных контекстах

dilmah ★★★★★
()

Static-функция - используется и может вызываться только в одном модуле. Мне это объявление удобно тем, что размер исполняемого файла становится меньше.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от ttnl

ты пойми -- этот варнинг будет только если кроме этих a.c a.h b.h есть еще файлы которые инклудят [ab].h

Ты ничего про этот файл не сказал.

Естественно что он будет ругаться -- статик это.

Я не понимаю зачем тебе нужно выносить декларацию этой функции в хедер. То что ты написал про уменьшение размера -- это бред какой-то.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> Есть необходимость в соответствующем заголовочном файле иметь прототипы статических функций

если есть необходимость, то сделай приватный хедер, который будет инклудится только в a.c но нигде больше

dilmah ★★★★★
()
Ответ на: комментарий от ttnl

Проект уже килобайт под 100 и я решил проверить его на чистоту языка.

ttnl ★★★★★
() автор топика

Если я правильно понял... то афтор хочет чтобы в файле a.c можно было использовать функции в любом порядке, типа чтобы не обязательно они были объявлены до своего использования... если это так, то можно вначале сделать

static void func (...);

а само описание функции где-нить внизу файла забацать...

если афтор хочет чего-то другого... чего-то странного... то флаг ему в руки :)

Cy6erBr4in ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.