У меня очень странная проблема при попытке запустить эту довольно простую C программу , которая использует zmq и msgpack .
С server.c
проблем нет, однако в clinet.c:39
это msgpack_pack_int (&mpkg, i);
и значение i
кажется
быть выбранным как 0
и не изменяется на каждой итерации. я
попробовал кучу разных вещей (например, сделать указатель на
i
и, используя это, также пытался разделить его на функцию и т. Д.)
и ничто не помогает. Я вижу, что msgpack_pack_int()
макрос, но почему он привел бы такое поведение и что может
Я делаю, чтобы преодолеть это? Есть ли флаг, который может изменить поведение
этого вида макроса (как я вижу, он расширяется до встроенной функции) ...
Я пробовал -Werror -Wall
, с gcc
и clang
, и ничего
также появляется предупреждение; (*
Я попытался отладить его и i
с шагом, как и ожидалось.
Я даже попробовал это, и все равно было бы то же самое:
void pack (msgpack_packer *p, msgpack_sbuffer *b) {
static volatile int i = 0;
printf("\ni=%d\n", i);
msgpack_packer_init (p, b, msgpack_sbuffer_write);
msgpack_pack_array (p, 2);
msgpack_pack_int (p, i++);
msgpack_pack_str (p, "/i/am/a/clinet/");
}
Я даже попробовал что-то, что должно было быть другим, но и здесь не повезло -
int count (void) {
static int i = 0;
i += 1; return i;
}
Кто-нибудь может понять, почему это произошло?
Обновление 1: Также я перекомпилировал msgpack саму библиотеку без флагов оптимизации,
и это тоже не изменило поведение.
Обновление 2: Установлен msgpack из git repo, и у меня все еще возникает та же проблема.