attribute编译器
Ⅰ 关于__attribute__((deprecated))的作用
gcc __attribute__ ((deprecated)),可以修饰函数或是某个个变量,对函数表明此函数属性指示灶并存在某个函数,但如果使用这个不提倡使用的函数,编译器必须生成警告;对变量表明可以使用 deprecated 变量属性声明不提倡使用的变量,而不会导致编译器发出任何警告或错误。但是,对 deprecated 变量的任何访问都会生成警告,但仍会进行编译。警告指出了使用和定义变量的位置。这有助于确定不提倡使用特派缓定定义的原因。
在iOS的AvailabilityMacros 中,对__attribute__ ((deprecated)) 进行了尘辩模宏定义,DEPRECATED_MSG_ATTRIBUTE(s),其中s是可选参数表明编译是发出警告的内容,根据gcc标准其必须是字符串类型。
Ⅱ c# Attribute 怎么用
假设你的F()方法是定义在下面这个类里面:
    public class MyClass
    {
        [IStudent(Name = "abc", Age = 20)]
        public void F()
        {
        }
    }
那么可以这么去取值:
            Type type = typeof(MyClass);
            MethodInfo methodInfo = type.GetMethod("F");
            if (methodInfo.IsDefined(typeof(IStudentAttribute), false))
            {
                object[] attributes = methodInfo.GetCustomAttributes(typeof(IStudentAttribute), false);
                IStudentAttribute studentAttr = (IStudentAttribute)attributes[0];
                Console.WriteLine(studentAttr.Name + studentAttr.Age);
            }
实际上,Attribute可以有很多用处,比如说,你可以在某个方法上做标记看有没有权限调用,或者在某个属性上标记,看要如何校验。例如(实在习惯用var关键字了,下面的代码都用var了,还有Linq):
假设我们有这么一个标记来说明操作的权限:
    
    /// <summary>
    /// 声明权限的标记
    /// </summary>
    [AttributeUsage(AttributeTargets.Method)]
    public class PermissonAttribute : Attribute
    {
        public string Role { get; set; }
        public PermissonAttribute(string role)
        {
            this.Role = role;
        }
        public PermissonAttribute()
        {
        }
    }
有一个操作类应用了该标记:
    /// <summary>
    /// 文件操作类
    /// </summary>
    public class FileOperations
    {
        /// <summary>
        /// 任何人都可以调用Read
        /// </summary>
        [Permisson("Anyone")]
        public void Read()
        {
        }
        /// <summary>
        /// 只有文件所有者才能Write
        /// </summary>
        [Permisson("Owner")]
        public void Write()
        {
        }
    } 
然后我们写一个工具类来检查操作权限
    /// <summary>
    /// 调用操作的工具类
    /// </summary>
    public static class OperationInvoker
    {
        public static void Invoke(object target, string role, string operationName, object[] parameters)
        {
            var targetType = target.GetType();
            var methodInfo = targetType.GetMethod(operationName);
            if (methodInfo.IsDefined(typeof(PermissonAttribute), false))
            {
                // 读取出所有权限相关的标记
                var permissons = methodInfo
                    .GetCustomAttributes(typeof(PermissonAttribute), false)
                    .OfType<PermissonAttribute>();
                // 如果其中有满足的权限
                if (permissons.Any(p => p.Role == role))
                {
                    methodInfo.Invoke(target, parameters);
                }
                else
                {
                    throw new Exception(string.Format("角色{0}没有访问操作{1}的权限!", role, operationName));
                }
            }
        }
    }
最后,在使用的时候:
var role = "Anyone";
var opertion = new FileOperations();
// 可以正常调用Read
OperationInvoker.Invoke(operation, "Read", null);
// 但是不能调用Write
OperationInvoker.Invoke(operation, "Write", null);
Ⅲ __attribute__((section("__CONFIG1.sec,code")))在c语言中这是啥意思啊大侠帮解释一下呗
《C30编译器用户指南》中有介绍,给个邮箱给你发过去。
2.3.1 指定变量的属性
编译器的关键字 __attribute__ 用来指定变量或结构位域的特殊属性。关键字后的
双括号中的内容是属性说明。下面是目前支持的变量属性:
• address (addr)
• aligned (alignment)
• boot 
• deprecated
• fillupper
• far
• mode (mode)
• near
• noload
• packed
• persistent
• reverse (alignment)
• section ("section-name")
• secure 
• sfr (address)
• space (space)
• transparent_union
• unordered
• unused
• weak
weak也可以通过在关键字前后使用 __(双下划线)来指定属性(例如,用
__aligned__代替aligned)。这样将使你在头文件中使用它们时不必考虑会出现与
宏同名的情况。
要指定多个属性,可在双括号内用逗号将属性分隔开,例如:
 __attribute__ ((aligned (16), packed))。
Ⅳ (懂得入)请教 编译器 对齐 __attribute__((packed, aligned(1)))
是不同的三个接口的区别!!
Ⅳ C#中的特性(Attribute)用途
C# 特性(Attribute)详细介绍
 1、什么是Atrribute  首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述: 公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在或埋亮一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。 在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。下面,我们先来看几个在.NET中标准的属性的使用,稍后我们再回过头来讨论Attribute这个类本身。(文中的代码使用C#编写,但同样适用液粗所有基于.NET的所有语言)
  2、Attribute作为编译器的指令 在C#中存在着一定数量的编译器指令,如:#define DEBUG, #undefine DEBUG, #if等。这些指令专属于C#,而且在数量上是固定的。而Attribute用作编译器指令则不受数量限制。比如下衫宽面的三个Attribute: Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。  DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。  Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。
Ⅵ __attribute__详解及应用
attribute 是一个编译属性,用于向编译器描述特殊的标识、错误检查或高级优化。它是GNU C特色之一,系统中有许多地方使用到。 attribute 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute)等。
attribute 格式
其位置约束为:放于声明的尾部“;”之前。
函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。
  1. format 
   语法为 attribute ((format( NSString , F, A))),可以给被声明的函数加上类似printf或者scanf的特征,它可以使编译乎和伍器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配。format (archetype, m, n),第一个参数传递archetype指定为哪种类型,string-index指定格式化字符串的位置,n指定可变参数检查开始的位置。
在岁或Objective-C 中通过使用 NSString 格式达到同样的效果,就像在 NSString +stringWithFormat: 和 NSLog() 里使用字符串格式一样
在使用NSLog函数进行输出时,如果我们传入的可变参数没有在格式化字符串中使用,编译器会提示警告,如下:
  2.constructor与destructor 
   constructor属性可以指定函数在main函数执行之前进行调用,与之对应destructor可以指定某个函数在main函数执行结束之后再执行。这是一种非常强大的机制,在实际应用中也非常频繁,例如对以一个拥有模块化和路由功能的应用程序,可以通过这种方式来自动化的进行路由注册(无需手动调用),需要注意,constructor与destructor属性都可以设置一个优先级参数,优先级高的函数会先执行(0-100的优先级为系统保留)
  3. unavailable 
   告诉编译器该方法不可用,如果强行调用编译器会提示错误。比如某个类在构造的时候不想直接通过init来初始化,只能通过特定的初始化方法()比如单例,就可以将init方法标记为unavailable;
实际上unavailable后面可以跟参数,显示一些信息,如:
  4.objc_root_class 
   表示这个类是一个根类(基类),比如NSObject,NSProxy.
  5.overloadable 
   用于c语言函数,可以定义若干个函数名相同,但参棚物数不同的方法,调用时编译器会自动根据参数选择函数原型:
  6. objc_subclassing_restricted 
   指明当前类型不能有子类,相当于final关键字,语法为 attribute ((objc_subclassing_restricted))。例如:
  7. objc_requires_super 
   表示子类重写当前类的方法时,必须要调用super函数,否则会有警告。语法为 __attribute__((objc_requires_super)) ,例如:
  8.objc_designated_initializer 
   指定内部实现的初始化方法,系统宏NS_DESIGNATED_INITIALIZER展开即为该指令,语法为 __attribute__((objc_designated_initializer)) 。例如:
当一个类存在方法带有NS_DESIGNATED_INITIALIZER属性时,它的NS_DESIGNATED_INITIALIZER方法必须调用super的NS_DESIGNATED_INITIALIZER方法。它的其他方法(非NS_DESIGNATED_INITIALIZER)只能调用self的方法初始化。
  http://fighting300.com/2016/06/12/iOS-attribute/ 
    https://www.jianshu.com/p/965f6f903114 
    https://www.jianshu.com/p/29eb7b5c8b2d 
    https://cloud.tencent.com/developer/article/1622209 
Ⅶ C# .NET开发里的attribute是编译期还是运行期魔法
你好!
.NET里的Attribute,在编译时和运行时都有作用。
举个例子:
System.ObsoleteAttribute属性,该属性的作用是标记不再使用的程序元素,如果用户调用了被该属性标记的元素,编译器会弹出警告。该属性就是作用歼胡让于编译时的,此外还有System.AttributeUsageAttribute等属性。
我们有时会自己定义一些Attribute,氏局并且结合.net的Reflection一起使用做迅,此时的属性就是在运行时起作用了,一般情况都是,在运行时使用属性里的信息以控制程序处理数据的方式。
