В GNU C macro envSet (name), что означает (void) "" name?
я наткнулся на этот синтаксис сегодня и не мог понять, что это значит:
// Uses the GNU C statement expression extension
#define envSet(name) ({
static int initialised;
static bool set;
(void) "" name;
if (!initialised || !g_cacheEnv) {
const char *value = getenv(name);
set = value != NULL;
initialised = true;
}
set;
})
конкретная строка, которую я не могу понять:
(void) "" name;
может кто - нибудь пролить свет на это?
3 ответа:
Это похоже на способ статически гарантировать, что
name
- Это строковый литерал, а не какой-то другой тип.Если у вас
(void)"" "hello";
тогда это допустимое выражение C.но если вы делаете что-то вроде
(void)"" 1;
тогда вы получаете синтаксическую ошибку.