Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
4 / 4 / 0
Регистрация: 08.08.2013
Сообщений: 48

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

22.07.2014, 11:46. Показов 3632. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
В исходном коде Android я нашёл один файл нативного кода на C/C++. Все функции помечены как static и располагаются в одном файле, который больше 9000 строк кода.
Не понимаю, почему не разбить этот файл на несколько, чтобы удобнее было читать. Есть какое-нибудь обоснование этому? Может быть static функции выполняются быстрее или что-нибудь ещё?
https://android.googlesource.c... Crypto.cpp
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.07.2014, 11:46
Ответы с готовыми решениями:

Почему к методам, которые не объявлены как Static нельзя обращаться напрямую из класса этого метода?
Почему к методам, которые не объявлены как Static нельзя обращаться напрямую из класса этого метода, а надо сначала создать сначала...

Как использовать функции, которые объявлены другой форме
Приветствую всех! Господа, подскажите пожалуйста как мне быть. Сделал устройство, которое настраивается через последовательный порт....

Почему методы wait() и notify() объявлены в классе Object, а не Thread?
никак не могу разобраться

22
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
23.07.2014, 19:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от HighPredator Посмотреть сообщение
Можете мысль развить, а то мне что-то не совсем понятно?
Таблицы экспорта (посмотреть их можно командой nm) занимают место в бинаре. Если имя в таблицу не попадает, то, соответственно, и не занимает место.
Цитата Сообщение от HighPredator Посмотреть сообщение
Мне казалось в винде тоже так, не?
В винде не так. В винде, если, например в *.dll, тебе надо добавить функцию в таблицу экспорта, ты должен ее объявить специально (__declspec(dllexport) и ко.). В линуксе все добавляется по-умолчанию. И еще одна особенность, библиотеки в dll при линковке по-умолчанию требуют удовлетворения всех зависимостей. В linux по-умолчанию для *.so (ключ -shared) можно не указывать вообще никаких зависимостей (для управления этим есть специальный ключ у ld), все будет разрешаться при линковке исполняемого файла. Под зависимостями имеются в виду другие библиотеки, которые требуются для сборки.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
24.07.2014, 08:48
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
Как видно, обе функции там есть.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
24.07.2014, 19:03
Цитата Сообщение от HighPredator Посмотреть сообщение
Разве есть в исполняемых файлах (не в библиотеках всяких) секция экспорта?
Как бы, библиотека - это тоже исполняемый файл. И я говорил преимущественно о библиотеках. Обрати внимание на контекст в предыдущем посте.

Цитата Сообщение от HighPredator Посмотреть сообщение
Выхлоп nm:
Ключи бы показал. С помощью nm можно ведь не только таблицы экспорта выводить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2014, 19:03

Почему перегрузку операторов в C++ не даёт сделать как static?
Добрый день. Допустим, есть некий сложный класс Vector , и я хочу перегрузить оператор + для него. Если написать так - ...

Как правильно разместить static поверх других static-ов
Есть кнопка, нажимая на которую становится видно статик. проблема в том, что статик отображатеся сзади других статиков и кнопок. как...

Как изменить свойство non-static объекта из static метода
Понимаю, что такое не задумано средствами Net Framework, но у меня из-за этого не работает одна фишка, которую я месяц писал, вообщем у...

Нужно ли функции с оператором глобального разрешения ставить сразу за классом,в котором объявлены?
Добрый день! Подскажите, пожалуйста, обязательно ли функция или конструктор от определённого класса и вынесенные за пределы класса, с...

Где объявлены API функции или какие файлы являются хидерами для C#?
РЕшил использовать API-функцию, например MessageBox using System; using System.Collections.Generic; using System.Linq; using...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru