zoukankan      html  css  js  c++  java
  • __attribute__((noreturn))的用法

    外文地址:http://www.unixwiz.net/techtips/gnu-c-attributes.html


    __attribute__ noreturn    表示没有返回值

    This attribute tells the compiler that the function won't ever return, and this can be used to suppress errors about code paths not being reached. The C library functions abort() and exit() are both declared with this attribute:

    这个属性告诉编译器函数不会返回,这可以用来抑制关于未达到代码路径的错误。 C库函数abort()和exit()都使用此属性声明:

    extern void exit(int)   __attribute__((noreturn));
    extern void abort(void) __attribute__((noreturn));
    

    Once tagged this way, the compiler can keep track of paths through the code and suppress errors that won't ever happen due to the flow of control never returning after the function call.

    In this example, two nearly-identical C source files refer to an "exitnow()" function that never returns, but without the __attribute__tag, the compiler issues a warning. The compiler is correct here, because it has no way of knowing that control doesn't return.

    $ cat test1.c
    extern void exitnow();
    
    int foo(int n)
    {
            if ( n > 0 )
    	{
                    exitnow();
    		/* control never reaches this point */
    	}
            else
                    return 0;
    }
    
    $ cc -c -Wall test1.c
    test1.c: In function `foo':
    test1.c:9: warning: this function may return with or without a value
    

    But when we add __attribute__, the compiler suppresses the spurious warning:

    $ cat test2.c
    extern void exitnow() __attribute__((noreturn));
    
    int foo(int n)
    {
            if ( n > 0 )
                    exitnow();
            else
                    return 0;
    }
    
    $ cc -c -Wall test2.c
    no warnings!



  • 相关阅读:
    IIFE(立即执行函数表达式)
    函数劫持
    nuxt.js怎么写一个全局的自定义指令
    nuxtjs里面使用vuex
    Nuxt.js端口冲突 Nuxt.js 如何更改端口配置?
    nuxt怎么去新增页面
    nuxt服务端渲染怎么引入element ui
    mac安装vue-cli和nuxt
    正则-怎么把字符串里面的英文去掉
    mac如果将项目部署到github,以及 github部署静态网站
  • 原文地址:https://www.cnblogs.com/alan666/p/8312059.html
Copyright © 2011-2022 走看看