Как создать ГДЕ В пункте с Zend_Db_Select

У нас есть два файла: foo.c и bar.c.

Вот foo.c

#include <stdio.h>

volatile unsigned int stop_now = 0;
extern void bar_function(void);

int main(void)
{
  while (1) {
     bar_function();
     stop_now = 1;
  }
  return 0;
}

Теперь, здесь bar.c

#include <stdio.h>

extern volatile unsigned int stop_now;

void bar_function(void)
{
   while (! stop_now) {
      printf("Hello, world!\n");
      sleep(30);
   }
}

Как вы можете видеть, у нас нет общего заголовка между foo.c и bar.c, однако для bar.c требуется что-то, объявленное в foo.c, когда оно связано, а foo.c требуется функция из bar.c когда он связан.

Используя «extern», вы сообщаете компилятору, что все, что следует за ним, будет найдено (нестатическое) во время соединения; не оставляйте за ним ничего в текущем проходе, так как он будет встречен позже. Функции и переменные обрабатываются одинаково в этом отношении.

Очень полезно, если вам нужно поделиться каким-то глобальным между модулями и не захотеть ставить / инициализировать его в заголовке.

Технически каждая функция в публичном заголовке библиотеки является «extern», однако ее маркировка как таковая имеет очень мало пользы, в зависимости от компилятора. Большинство компиляторов могут понять это самостоятельно. Как вы видите, эти функции фактически определены где-то еще.

В приведенном выше примере main () будет печатать мир hello только один раз, но продолжать вводить bar_function (). Также обратите внимание: bar_function () не будет возвращаться в этом примере (поскольку это просто простой пример). Просто представьте, что stop_now изменяется при обслуживании сигнала (следовательно, волатильности), если это не представляется достаточно практичным.

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

Надеюсь, что это помогает:)

65
задан xelurg 4 December 2008 в 06:26
поделиться

2 ответа

можно также использовать его как это:

$data = array(1,3,4);
$select->where('status_id IN(?)', $data);

Вы не должны интегрировать массив, и это более безопасно

168
ответ дан Martin Rázus 7 November 2019 в 11:24
поделиться

по-видимому, это супер просто... глупое меня:

$select->where('status_id IN(1,3,4)');

: (

8
ответ дан xelurg 7 November 2019 в 11:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: