晨旭的博客
你想干什么!
晨旭的博客~
#define st(x) do { x } while (__LINE__ == -1)的用法
#define st(x) do { x } while (__LINE__ == -1)的用法

此文章为笔记

#define st(x)      do { x } while (__LINE__ == -1)

__LINE__ 是个宏,它代表当前代码在源文件的行号,它是大于0的,所以__LINE__ == -1 等同于0,化简为:

#define st(x)      do { x } while (0)

Example:

#define a(x) if(x) { printf("%s\n", "OK"); }
int i = 1;
if(0)
    a(i);
else
    printf("%s\n", "KO");

Will expand to something equivalent to:

if(0)
{
    if(x)
    {
        printf("%s\n", "OK");
    }
    else printf("%s\n", "KO");
}

However if you define a(x) as:

#define a(x) st(if(x) { printf("%s\n", "OK"); })

it will work, expanding to:

if(0)
{
    do
    {
        if(x)
        {
            printf("%s\n", "OK");
        }
    }
    while(0);
}
else printf("%s\n", "KO");

赞赏
如非特使说明,本站所有文章均采用知识共享 署名-非商业性使用-相同方式共享4.0国际许可协议(CC BY-NC-SA 4.0)进行许可。

相关文章

发表评论

textsms
account_circle
email

晨旭的博客~

#define st(x) do { x } while (__LINE__ == -1)的用法
此文章为笔记#define st(x)      do { x } while (__LINE__ == -1)__LINE__ 是个宏,它代表当前代码在源文件的…
扫描二维码继续阅读
2015-11-27