Форум программистов, компьютерный форум CyberForum.ru

Почему в файле все функции объявлены как static? - C++

Восстановить пароль Регистрация
 
 
LighterV
4 / 4 / 0
Регистрация: 08.08.2013
Сообщений: 48
22.07.2014, 11:46     Почему в файле все функции объявлены как static? #1
Привет!
В исходном коде Android я нашёл один файл нативного кода на C/C++. Все функции помечены как static и располагаются в одном файле, который больше 9000 строк кода.
Не понимаю, почему не разбить этот файл на несколько, чтобы удобнее было читать. Есть какое-нибудь обоснование этому? Может быть static функции выполняются быстрее или что-нибудь ещё?
https://android.googlesource.com/pla...tiveCrypto.cpp
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2014, 11:46     Почему в файле все функции объявлены как static?
Посмотрите здесь:

C++ [C/C++]Не могу объявить static функцию в header файле.
Отличие static от объявление переменных ДО функции main C++
как в файле вывести все в стречку и не в столбик ?!!?! C++
C++ определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
не видны переменные и объекты которые глобально объявлены в классе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6426 / 3800 / 880
Регистрация: 30.01.2014
Сообщений: 6,594
23.07.2014, 19:01     Почему в файле все функции объявлены как static? #21
Цитата Сообщение от HighPredator Посмотреть сообщение
Можете мысль развить, а то мне что-то не совсем понятно?
Таблицы экспорта (посмотреть их можно командой nm) занимают место в бинаре. Если имя в таблицу не попадает, то, соответственно, и не занимает место.
Цитата Сообщение от HighPredator Посмотреть сообщение
Мне казалось в винде тоже так, не?
В винде не так. В винде, если, например в *.dll, тебе надо добавить функцию в таблицу экспорта, ты должен ее объявить специально (__declspec(dllexport) и ко.). В линуксе все добавляется по-умолчанию. И еще одна особенность, библиотеки в dll при линковке по-умолчанию требуют удовлетворения всех зависимостей. В linux по-умолчанию для *.so (ключ -shared) можно не указывать вообще никаких зависимостей (для управления этим есть специальный ключ у ld), все будет разрешаться при линковке исполняемого файла. Под зависимостями имеются в виду другие библиотеки, которые требуются для сборки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5347 / 1730 / 320
Регистрация: 10.12.2010
Сообщений: 5,112
Записей в блоге: 3
24.07.2014, 08:48     Почему в файле все функции объявлены как static? #22
DrOffset, я по ходу немного в танке... Разве есть в исполняемых файлах (не в библиотеках всяких) секция экспорта?

Добавлено через 23 минуты
Вот пример:
main.c:
C
1
2
3
4
5
6
7
8
#include <stdio.h>
#include "test.h"
 
int main(void)
{
  TestFunction1(8);
  return 0;
}
test.h:
C
1
2
3
4
5
6
#ifndef _TEST_H_
#define _TEST_H_
 
void TestFucntion1(int a);
 
#endif
test.c:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include "test.h"
 
static void TestFunction2(int* p_a);
 
void TestFunction1(int a)
{
  TestFunction2(&a);
  printf("%d\n",a);
}
 
static void TestFunction2(int* p_a)
{
  *p_a = 8;
}
Выхлоп nm:
_bsd_init_routine D 4563404648 8
crt0_64.s f -
crt0_data d 4563404372 104
crt0_data d 4563404704 8
__crt0v d 4563404696 8
__crt0v U -
__C_runtime_pstartup B 4563404768 8
d 4563404744 8
__dce_compat_init_routine D 4563404672 8
errno d 4563404736 8
errno U -
exit d 4563404760 8
exit U -
.exit T 4294968872
.exit t 4294968872 40
glink64.s f -
glink64.s f -
.main T 4294968448
main.c f -
__malloc_user_defined_name d 4563404728 8
__malloc_user_defined_name U -
_malloc_user_defined_name D 4563404624 8
__mod_init d 4563404720 8
__mod_init U -
__n_pthreads d 4563404712 8
__n_pthreads U -
_nsl_init_routine D 4563404664 8
printf d 4563404752 8
printf U -
.printf T 4294968832
.printf t 4294968832 40
__pth_init_routine D 4563404640 8
p_xargc D 4563404632 4
p_xargv D 4563404680 8
p_xrc D 4563404692 4
p_xrcfg D 4563404688 4
../../../../../../../src/bos/usr/ccs/lib/libc/__threads_init.c f -
__start D 4563404584 16
.__start T 4294967800
.__start t 4294967800 173
_$STATIC d 4563404480 101
t 4294968064 384
t 4294968448 128
t 4294968576 256
t 4294968912 4
test.c f -
.TestFunction1 T 4294968640
.TestFunction2 t 4294968576
__threads_init D 4563404600 24
.__threads_init T 4294968064
.__threads_init@AF2_1 t 4294968128
TOC d 4563404624
_xti_tli_init_routine D 4563404656 8
Как видно, обе функции там есть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2014, 19:03     Почему в файле все функции объявлены как static?
Еще ссылки по теме:

Как можно функцию описаную в одном файле включить во все файлы проекта C++
Передача потока (текущ.позиции курсора в файле) как аргумент функции C++
C++ Массив в функции со static указателем на него

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DrOffset
6426 / 3800 / 880
Регистрация: 30.01.2014
Сообщений: 6,594
24.07.2014, 19:03     Почему в файле все функции объявлены как static? #23
Цитата Сообщение от HighPredator Посмотреть сообщение
Разве есть в исполняемых файлах (не в библиотеках всяких) секция экспорта?
Как бы, библиотека - это тоже исполняемый файл. И я говорил преимущественно о библиотеках. Обрати внимание на контекст в предыдущем посте.

Цитата Сообщение от HighPredator Посмотреть сообщение
Выхлоп nm:
Ключи бы показал. С помощью nm можно ведь не только таблицы экспорта выводить.
Yandex
Объявления
24.07.2014, 19:03     Почему в файле все функции объявлены как static?
Ответ Создать тему
Опции темы

Текущее время: 14:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru