簡體   English   中英

C標准符合性-標識符

[英]C Standard Conformance - Identifiers

我正在尋找一些有關C標准(C99和/或C11)的說明,主要是關於標識符的使用。
上下文是完整C99標准庫的實現,我希望它完全符合該標准。

基本問題是: C標准允許我在多大程度上聲明未在標准中列出的標識符/符號?

例如,讓我們考慮math.hisfinite宏。
可能的實現方式可能是:

#define isinf( _x_ )                                                       \
    (                                                                      \
        ( sizeof( _x_ ) == sizeof( float  ) ) ? _c99_math_isinf_f( _x_ ) : \
        ( sizeof( _x_ ) == sizeof( double ) ) ? _c99_math_isinf_d( _x_ ) : \
                                                _c99_math_isinf_l( _x_ )   \
    )

int _c99_math_isinf_f( float x );
int _c99_math_isinf_d( double x );
int _c99_math_isinf_l( long double x );

在這里,我需要聲明顯然不屬於 C標准的其他標識符

在C99標准( 一致性第4部分的注釋3中,我們可以閱讀:

這意味着除本國際標准中明確保留的標識符外,符合標准的實現不保留任何標識符。

我不確定是否了解。
這是否意味着我不允許聲明其他標識符?

假設情況並非如此,並且允許我為自己的實現聲明其他標識符,那么我應該遵循什么命名規則 ,考慮到這些標識符除了上面的示例中的宏擴展之外,不打算使用?

在C99標准的7.1.3節預留標識符 )中,我們可以閱讀:

  1. 以下划線,大寫字母或另一個下划線開頭的所有標識符始終保留供任何使用。
  2. 始終保留所有以下划線開頭的標識符,以用作普通名稱和標記名稱中具有文件范圍的標識符。

好的,我不會聲明帶有雙引號和雙引號的標識符,也不能帶單引號和大寫字母。
但是第二條規則又如何考慮我上面的示例呢?

保留標識符規則的重點是為實施保留了這些標識符。 現在,您正在編寫實現的一部分(而不是“最終用戶程序”),您應該在保留的名稱空間中命名標識符,以確保標識符不會意外地與(最終)端的標識符發生沖突。用戶。

作為運行中該規則的示例,如果您使用的是Linux,請使用“ readelf -s”檢查glibc或libgcc的符號列表。 您會發現大量帶有雙下划線的符號,或帶下划線的大寫字母。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM