Я столкнулся с рядом ограничений, связанных с подготовленным оператором:
Среди предлагаемых решений я бы выбрал тот, который не уменьшает производительность запроса и уменьшает количество запросов. Это будет # 4 (партия нескольких запросов) из ссылки @Don или указание значений NULL для ненужных '?' знаки, предложенные В.Дужевым
(1), более внешняя тема, если Вы - новичок, таким образом, вот пример:
#include <stdio.h>
void foo()
{
int a = 10;
static int sa = 10;
a += 5;
sa += 5;
printf("a = %d, sa = %d\n", a, sa);
}
int main()
{
int i;
for (i = 0; i < 10; ++i)
foo();
}
Это печатает:
a = 15, sa = 15
a = 15, sa = 20
a = 15, sa = 25
a = 15, sa = 30
a = 15, sa = 35
a = 15, sa = 40
a = 15, sa = 45
a = 15, sa = 50
a = 15, sa = 55
a = 15, sa = 60
Это полезно для случаев, где функция должна сохранить некоторое состояние между вызовами, и Вы не хотите использовать глобальные переменные. Остерегайтесь, однако, эта функция должна быть использована очень экономно - она делает Ваш код не ориентированным на многопотоковое исполнение и более твердым понять.
(2) используется широко в качестве функции "управления доступом". Если у Вас есть.c файл, реализовывая некоторую функциональность, это обычно выставляет только несколько "общедоступных" функций пользователям. Остальная часть его функций должна быть сделана static
, так, чтобы пользователь не мог получить доступ к ним. Это - инкапсуляция, хорошая практика.
Заключение в кавычки Википедия :
На языке программирования C, статичном, используется с глобальными переменными и функциями для установки их объема на содержание файла. В локальных переменных, статичных, используется для хранения переменной в статически выделенной памяти вместо автоматически выделенной памяти. В то время как язык не диктует реализацию ни одного типа памяти, статически выделенная память обычно резервируется в сегменте данных программы во время компиляции, в то время как автоматически выделенная память обычно реализуется как стопка устанавливающегося вызова.
См. здесь и здесь для получения дополнительной информации.
И отвечать на Ваш второй вопрос, это не похоже в C#.
В C++, однако, static
также используется для определения атрибутов класса (совместно использованный всеми объектами того же класса) и методы. В C нет никаких классов, таким образом, эта функция не важна.
Если Вы объявите переменную в функциональных помехах, то его значение не будет сохранено на стопке вызова функции и все еще будет доступно, когда Вы вызовете функцию снова.
, Если Вы объявляете статичную глобальную переменную, ее объем будет ограничен в файле, в котором Вы объявили это. Это немного более безопасно, чем постоянный клиент, глобальный, который может быть считан и изменен всюду по Вашей всей программе.
Это зависит:
int foo()
{
static int x;
return ++x;
}
функция возвратилась бы 1, 2, 3, и т.д.---переменная не находится на стеке.
static int foo()
{
}
Это означает, что эта функция имеет объем только в этом файле. Таким образом, a.c и b.c может иметь отличающийся foo()
с, и нечто не подвергнуто общим объектам. Таким образом, при определении нечто в a.c, Вы не могли бы получить доступ к нему от b.c
или ни от каких других мест.
В большинстве библиотек C все "частные" функции статичны, и большая часть "общественности" не.
defined(undef)
ложь, но defined(1==2)
верно.
– cjm
31 January 2010 в 10:52
static
разные вещи средств в различных контекстах.
можно объявить статическую переменную в функции C. Эта переменная только видима в функции однако, она ведет себя как глобальное в этом, она только инициализируется однажды, и она сохраняет свое значение. В этом примере каждый раз Вы звоните foo()
, он распечатает растущее число. Статическая переменная инициализируется только однажды.
void foo ()
{
static int i = 0;
printf("%d", i); i++
}
Другое использование помех состоит в том, когда Вы реализуете функциональную или глобальную переменную в.c файле, но не хотите, чтобы его символ был видим за пределами эти .obj
сгенерированный файлом. например,
static void foo() { ... }
В C, статичном, имеет два значения, в зависимости от объема его использования. В глобальной области видимости, когда объект объявляется на уровне файла, это означает, что тот объект только видим в том файле.
В любом другом объеме это объявляет объект, который сохранит его значение между различными временами, что конкретный объем вводится. Например, если интервал объявляется в рамках процедуры:
void procedure(void)
{
static int i = 0;
i++;
}
значение 'я' инициализируюсь для обнуления на первом вызове к процедуре, и значение сохраняется в каждый последующий раз, когда процедуру называют. если бы 'я' был распечатан, то это произвело бы последовательность 0, 1, 2, 3...
Короткий ответ... это зависит.
Статические определенные локальные переменные не теряют свое значение между вызовами функции. Другими словами, они - глобальные переменные, но ограниченный по объему к локальной функции они определяются в.
Статические глобальные переменные не видимы за пределами файла C, в котором они определяются.
Статические функции не видимы за пределами файла C, в котором они определяются.
Из Википедии:
На языке программирования C, статичный используется с глобальными переменными и функциями для установки их объема на содержание файла. В локальных переменных, статичных, используется для хранения переменной в статически выделенной памяти вместо автоматически выделенной памяти. В то время как язык не диктует реализацию ни одного типа памяти, статически выделенная память обычно резервируется в сегменте данных программы во время компиляции, в то время как автоматически выделенная память обычно реализуется как стопка устанавливающегося вызова.
and
и or
, которые просто возвращают операнд, который заставил их возвращать false.) (См. perldoc.perl.org/perlsyn.html#Truth-and-Falsehood ),
– cjm
31 January 2010 в 07:17
Если Вы объявляете это в mytest.c
файл:
static int my_variable;
Тогда эта переменная может только быть замечена из этого файла. Переменная не может быть экспортирована больше никуда.
, Если Вы объявляете в функции, значение переменной сохранит свое значение каждым разом, когда функция вызвана.
А статическая функция не может быть экспортирована снаружи файла. Таким образом в *.c
файл, Вы скрываете функции и переменные, если Вы объявляете их статичный.
1-!
оператор:)
– ysth
31 January 2010 в 07:27