Вы объявляете свой модуль определенные функции как статичный?

Сколько записей имеет ваш фрейм данных? это не имеет значения, хотя.

Я полагаю, что он ведет себя так, как ожидалось, так как вы показываете всего 5 записей, ваш второй запрос возвращает другой набор данных после разбиения.

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

Благодаря

10
задан EvilTeach 24 November 2008 в 16:02
поделиться

13 ответов

Если это - действительно функция, которая является внутренней только к этому.c файл, то да. Это должно помочь постараться не загрязнять глобальное пространство имен. Кроме того, я думаю, что компилятор может сделать некоторую оптимизацию с соглашениями о вызовах, если функция статична начиная с него knowns, никакой другой исходный файл не должен знать, как назвать его. Это только действительно относится к c, потому что, поскольку другие отметили, C++ имеет пространства имен для решения этой проблемы.

9
ответ дан 3 December 2019 в 13:32
поделиться

В C++ Вы объявили бы функцию, частную как это:

class MyClass
{                           
public:                 
void publiclyAccessibleFunction();            
private:                
    void onlyAccesibleFromWithinTheClass();
int some_member_parameter;          
};

Отметьте onlyAccesibleFromWithinTheClass() функция.

-1
ответ дан 3 December 2019 в 13:32
поделиться

Если Вы используете GCC, то необходимо смотреть на флаг видимости (см. http://gcc.gnu.org/wiki/Visibility для полного обсуждения).

Это скроет символы полностью в противоположность маркировке их недостижимый. Это уменьшает таблицу символов и помогает уменьшить времена ссылки.

Не только, что, это открывает дверь для большего количества встраивания, если это - то, что Вы после.

1
ответ дан 3 December 2019 в 13:32
поделиться

Если 'модулем' Вы просто имеете в виду файл CPP, Вы могли бы просто поместить объявление и определение прямо в файле CPP.

-1
ответ дан 3 December 2019 в 13:32
поделиться

В коде C сделайте свои функции статичными по умолчанию. Только сделайте нестатические функции и.h объявления для функций, которые будут необходимы другим модулям.

В коде C++, помещенном те функции, которые локальны для файла в анонимное пространство имен и делают их статичными. В компиляторе GNU, по крайней мере, это приведет к лучшему и наименьшему коду, потому что никакая функция не будет записана, если все использование будет встроено. Если Вы предназначаете это, чтобы быть встроенными, то, конечно, маркировка его встраивает, еще лучше, чем статичный.

Я не знаю, почему g ++ пишет неуместные тела функции, которые находятся в анонимных пространствах имен в вывод вообще, но он делает. Функции со скрытой видимостью, кажется, обнаруживаются также; отмеченный как скрытые символы, но все еще создание неиспользованных блоков кода в объектном файле. GCC, вероятно, не понимает, что код не необходим в тех случаях. Или я пропускаю что-то, всегда возможное.

1
ответ дан 3 December 2019 в 13:32
поделиться

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

1
ответ дан 3 December 2019 в 13:32
поделиться

О единственном потенциально полезном свойстве я могу думать для этого использования "статических" в C++, который не обеспечивают анонимные пространства имен, то, что существует предупреждение в GCC, который можно включить для неиспользованных статических функций (форма мертвого кода). Вы не получаете это для неиспользованных функций в анонимных пространствах имен, поэтому в маловероятном случае, что Вы хотите, чтобы компилятор сказал Вам, когда Вы прекращаете использовать функцию, сделайте это тот путь.

1
ответ дан 3 December 2019 в 13:32
поделиться

Договорились. Как следствие прототипы для статических функций должны пойти наверху.c файла, не в.h файле.

2
ответ дан 3 December 2019 в 13:32
поделиться

В C++ необходимо использовать анонимное пространство имен, как так:

// foo.cpp
namespace
{
   class Core { ... };
   void InternalFandango(Core *);
}

void SomeGloballyVisibleFunction()
{
   InternalFandango(&core);
}

Преимущество: это применимо к структуре / объявления класса, также.
В C просто отметьте "статичные" функции. Нет ничего против использования "статичного" в C++ также, но я учился предпочитать пространство имен, поскольку это - одно единственное понятие, которое работает на все объявления.

2
ответ дан 3 December 2019 в 13:32
поделиться

В C я делаю все - функции и переменные - статичным в объеме файла, пока я не могу продемонстрировать, что они необходимы вне файла. Я сделаю вещи статичными в функции, если только, что функция будет использовать их и они не будут слишком огромны. В основном, если объявление больше, чем остальная часть функции, я могу поместить объявление вне функции. И, конечно, существует заголовок для услуг общего пользования, предоставленных исходным файлом.

2
ответ дан 3 December 2019 в 13:32
поделиться

Для C++ лучшее, чем статичный должно поместить его в (анонимное) пространство имен без имени. Это - предпочтительный способ предотвратить загрязнение Глобального пространства имен.

namespace {
void myLocalFunction() {
// stuff
}
}
26
ответ дан 3 December 2019 в 13:32
поделиться

Был много о деталях реализации и не слишком много о понятии.

Ограничение объема переменной/функции и т.д. хорошая практика действительно. Это - фундаментальное понятие объектно-ориентированного проектирования - Вы хотите, сохраняют частными как частными. Таким образом, Ваш интерфейс является более чистым, и обслуживание кода легче. И Вы не найдете один день, что изменение чего-то, что Вы рассмотрели как частное, повредило компиляцию, потому что кто-то в другой части проекта любил Вашу функцию и решил использовать его.

2
ответ дан 3 December 2019 в 13:32
поделиться

Я думаю, что C и C++ имеют различные ограничения относительно static: в C у Вас нет пространств имен, и.c файлы являются Вашими модулями, таким образом, действительно действительно важно поместить все непубличные функции как статичные для предотвращения ошибок!

1
ответ дан 3 December 2019 в 13:32
поделиться