typedef æå®å
-
typedef
- ååã使ç¨ããå ´æãªãã©ãã§ã使ç¨ã§ããå¥åã使ãã¾ãã
-
ç®æ¬¡ |
[ç·¨é] 説æ
typedef æå®åã¯ã宣è¨ã® decl-specifier-seq ã§ä½¿ç¨ãããã¨ãããã®å®£è¨ã typedef 宣è¨ã§ããã颿°ããªãã¸ã§ã¯ãã§ã¯ãªã typedef åã宣è¨ãããã¨ãæå®ãã¾ãã åãè¡ã§ã²ã¨ã¤ã¾ãã¯è¤æ°ã®èå¥åã宣è¨ãã¦ãè¯ã (ä¾ãã° int 㨠int ã¸ã®ãã¤ã³ã¿ãªã©)ãé åã颿°åããã¤ã³ã¿ãåç §ãã¯ã©ã¹åãªã©ã宣è¨ãã¦ãæ§ãã¾ããã ãã®å®£è¨ã§å°å ¥ãããããããã®èå¥å㯠typedef åã¨ãªãããããã¼ã¯ã¼ã typedef ãç¡ãã£ããªãã°å®£è¨ãããã§ããããªãã¸ã§ã¯ãã颿°ã®åã®å義èªã¨ãªãã¾ãã
typedef æå®åã¯åæå®åãé¤ãä»ã®ãããªãæå®åã¨ãçµã¿åããããã¨ã¯ã§ãã¾ããã
typedef åã¯æ¢åã®åã®å¥åã§ãããæ°ããåã®å®£è¨ã§ã¯ããã¾ããã typedef ã¯æ¢åã®åå (typedef åãå«ã) ã®æå³ãå¤ããããã«ä½¿ç¨ãããã¨ã¯ã§ãã¾ããã ãã£ãã宣è¨ããã typedef åã¯ãããä¸åº¦åãåãåç §ããããã«ã®ã¿å宣è¨ãã¦ãæ§ãã¾ããã typedef åã¯ããããå¯è¦ãªã¹ã³ã¼ãã§ã®ã¿æå¹ã§ãã ç°ãªã颿°ãã¯ã©ã¹ã§ã¯åä¸ã®ååã®åãç°ãªãæå³ã§å®ç¾©ãã¦ãæ§ãã¾ããã
typedef struct X {}; // ill-formed |
(C++17以ä¸) |
[ç·¨é] ãªã³ã±ã¼ã¸ç®çã® typedef å
å½¢å¼çã«ã¯ã typedef 宣è¨ãç¡åã¯ã©ã¹ã¾ãã¯åæãå®ç¾©ããå ´åããã®ã¯ã©ã¹åã¾ãã¯åæåã¨ãªããã®å®£è¨ã«ãã£ã¦å®£è¨ãããæåã® typedef åã¯ããªã³ã±ã¼ã¸ç®çã§ãã®ã¯ã©ã¹åã¾ãã¯åæåã示ãããã«ä½¿ç¨ããã¾ãã ä¾ãã°ã typedef struct { /* ... */ } S; ã®å ´åã S ã¯ãªã³ã±ã¼ã¸ç®çã® typedef åã§ãã ãã®æ¹æ³ã§å®ç¾©ãããã¯ã©ã¹åãåæåã¯ã (ç¡ååå空éå ã§ãªããã°) å¤é¨ãªã³ã±ã¼ã¸ãæã¡ã¾ãã
ãã®æ¹æ³ã§å®ç¾©ãããç¡åã¯ã©ã¹ã¯ C äºæã®è¦ç´ ã®ã¿ãå«ãã¹ãã§ãã ç¹ã«ã
ã¾ãããã¹ã¦ã®ã¡ã³ãã¯ã©ã¹ããããã®è¦ä»¶ã (å帰çã«) æºãããªããã°ãªãã¾ããã |
(C++20以ä¸) |
[ç·¨é] ãã¼ã¯ã¼ã
[ç·¨é] ãã¼ã
åã¨ã¤ãªã¢ã¹ã¯ã typedef ã¨åãæ©è½ãç°ãªãæ§æã§æä¾ããããã«ãã³ãã¬ã¼ãåã«ãé©ç¨ã§ãã¾ãã
[ç·¨é] ä¾
// åç´ãª typedefã typedef unsigned long ulong; // 以ä¸ã®2ã¤ã®ãªãã¸ã§ã¯ãã¯åãåã§ãã unsigned long l1; ulong l2; // ãã£ã¨è¤é㪠typedefã typedef int int_t, *intp_t, (&fp)(int, ulong), arr_t[10]; // 以ä¸ã®2ã¤ã®ãªãã¸ã§ã¯ãã¯åãåã§ãã int a1[10]; arr_t a2; // ãstruct Sãã¨æ¸ãã®ãåé¿ããããã®ä¸è¬ç㪠C è¨èªã®ã¤ãã£ãªã ã typedef struct {int a; int b;} S, *pS; // 以ä¸ã®2ã¤ã®ãªãã¸ã§ã¯ãã¯åãåã§ãã pS ps1; S* ps2; // ã¨ã©ã¼ãè¨æ¶åã¯ã©ã¹æå®å㯠typedef 宣è¨ã§ã¯ä½¿ç¨ã§ãã¾ããã // typedef static unsigned int uint; // typedef 㯠decl-specifier-seq ã®ä¸ãªãã©ãã§ã使ç¨ã§ãã¾ãã long unsigned typedef int long ullong; // æ®éã«æ¸ãã¨ãtypedef unsigned long long int ullong;ãã§ãã // ä»ã®å¤ãã®ã¡ã¿é¢æ°ã¨åæ§ã«ã std::add_const ã¯ã¡ã³ã typedef ã使ç¨ãã¾ãã template< class T> struct add_const { typedef const T type; }; typedef struct Node { struct listNode* next; // listNode ã¨ããååã®æ°ãã (ä¸å®å ¨ãª) æ§é ä½åã宣è¨ãã¾ãã } listNode; // ã¨ã©ã¼ãåã«å®£è¨ãããæ§é ä½ã®ååã¨è¡çªãã¾ãã
[ç·¨é] é¢é£é ç®
typedef å®£è¨ ã® Cè¨èªãªãã¡ã¬ã³ã¹
|