當前位置:首頁 » 編程軟體 » attribute編譯器

attribute編譯器

發布時間: 2023-03-17 22:30:37

Ⅰ 關於__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一起使用做迅,此時的屬性就是在運行時起作用了,一般情況都是,在運行時使用屬性里的信息以控製程序處理數據的方式。

熱點內容
免費搭建在線查詢伺服器 發布:2024-04-19 08:17:28 瀏覽:45
vs資料庫實例 發布:2024-04-19 08:14:54 瀏覽:294
vfp9反編譯 發布:2024-04-19 08:11:31 瀏覽:380
火車軟卧無線密碼是多少 發布:2024-04-19 07:38:59 瀏覽:422
vb系統文件夾 發布:2024-04-19 07:29:58 瀏覽:739
qt怎麼添加文件夾 發布:2024-04-19 07:22:53 瀏覽:255
sql查詢表是否存在 發布:2024-04-19 06:11:48 瀏覽:622
T178Tccftp 發布:2024-04-19 06:11:35 瀏覽:185
電腦遠程訪問自己的伺服器 發布:2024-04-19 00:08:03 瀏覽:96
噸包演算法 發布:2024-04-19 00:02:13 瀏覽:328