/* blah.h */
extern struct blah { int a, b } test_blah; /* описание */
/* blah.c */
#include "blah.h"
struct blah test_blah; /* реальное объявление */
/* mainc. */
#include "blah.h"
/* можно использовать test_blah */
/* blah.h */
extern struct blah *test_blah; /* неполное описание */
/* blah.c */
#include "blah.h"
struct blah { int a, b }; /* полное описание */
static struct blah real_test_blah; /* внутренняя переменная */
struct blah *test_blah = &real_test_blah;
/* mainc. */
#include "blah.h"
/* можно использовать test_blah, но как слепой указатель */
int foo(Bar& bar, Baz& baz)
) — все это как бы намекает, что bar
и baz
хранит не стоит, если только из контекста или документации не следует обратное. В любом случае, я их и не храню, если нужно, делаю копию, так что это не так важно. Меня больше фокус с auto_ptr
волновал, я думал, это какая-то идиома :) auto_ptr
к нему — теперь знаю, что это самобытное творчество :) auto_ptr
меня смутил. (Да, и этот хитромудрый конструкт — это reset()
, я просто переписал не ту версию, в Win32 у них почему-то такой вот костыль.)auto_ptr
. Да, наверное, пойду авторам писать. (Тут еще беда в том, что продукт коммерческий и писать не совсем ясно, кому, не поддержке же индийской и не менеджерам, но вроде где-то у меня было что-то более прямое.)
#x007F-#x0084
и т. п., так как эти диапазоны или не определены (и не будут) или содержат control characters. Что до#x10000
и прочих кодов, которые выходят за пределы двух байтов, то тут зависит от реализации Юникода — не в каждой программе Юникод четырехбайтовый. В моем случае, например, он двухбайтовый, тут (UTF-16) тоже, так что таких символов просто не встретится.