C言語でtuple
July 10, 2013 at 09:02 PM | categories: C, programming |Cをつかってるとtupleっぽいものがあれば便利なのに、と思うときが時々あります。
別にtupleなんてなくても
typedef struct { char *s; int *i; } tuple;
のようにして構造体をつかえばいいのですが、必要になるたびにこれをするのはちょっとめんどくさいですよね。
というわけで色々試行錯誤してみたところ、以下のようにしてunionの配列にするというのがそこそこ便利だったので紹介します。
以下は使用例です。
#include <stdio.h> typedef union { void *p; char *s; int i; char c; } tuple_u; typedef tuple_u tuple[2]; int main(int argc, char *argv[]) { tuple t = { { .s = "hoge" }, { .i = 123 } }; printf("%s, %d\n", t[0].s, t[1].i); return 0; }
C99のdesignated initializerをつかえば初期化もまあそこそこ書きやすいし、型の組み合わせもある程度柔軟にできます。
C++ではなくあえてCをつかうような人の多くは独自のコンテナライブラリのようなものをもってると思いますが、上記のようなtupleがあれば便利な場面は結構あるのではないかと思います。
blog comments powered by Disqus
About Me
| 
         | 
        
        mojavy | 
    
Recent posts
95/5 Mbps とは
(August 30, 2015 at 04:22 PM)組み込み用プログラミング言語のパフォーマンス比較
(April 21, 2015 at 01:10 AM)最近読んだ本
(April 05, 2015 at 01:23 PM)Phabricatorを使ったワークフローについて
(March 02, 2015 at 08:55 PM)dnsimpleでダイナミックDNSをつかう
(December 23, 2014 at 08:02 PM)www2014のアドテク関連のResearch Trackメモ
(October 06, 2014 at 09:05 PM)flappymacs がMELPAに登録されました
(July 16, 2014 at 01:07 AM)EmacsでFlappy Birdっぽいもの書きました
(July 10, 2014 at 08:01 PM)
Recent Popular posts
Popular posts
Categories
- C (rss) (3)
 - R (rss) (1)
 - adtech (rss) (1)
 - advent calendar (rss) (2)
 - algorithms (rss) (2)
 - android (rss) (2)
 - aws (rss) (1)
 - blog (rss) (2)
 - blogofile (rss) (3)
 - books (rss) (1)
 - c++ (rss) (1)
 - chef (rss) (4)
 - common lisp (rss) (10)
 - debian (rss) (2)
 - dns (rss) (1)
 - elasticsearch (rss) (1)
 - elf (rss) (1)
 - elisp (rss) (1)
 - emacs (rss) (5)
 - english (rss) (1)
 - game (rss) (2)
 - gearman (rss) (1)
 - git (rss) (1)
 - github (rss) (1)
 - gitlab (rss) (1)
 - golang (rss) (2)
 - history (rss) (1)
 - impress.js (rss) (1)
 - internet (rss) (1)
 - ios (rss) (3)
 - jekyll (rss) (1)
 - jenkins (rss) (1)
 - linux (rss) (4)
 - lisp (rss) (2)
 - ltsv (rss) (1)
 - lua (rss) (1)
 - mac (rss) (3)
 - mach-o (rss) (1)
 - memo (rss) (2)
 - mustache (rss) (1)
 - note (rss) (1)
 - objective-c (rss) (4)
 - os (rss) (1)
 - osx (rss) (2)
 - others (rss) (1)
 - paco (rss) (1)
 - pdf (rss) (1)
 - php (rss) (2)
 - postfix (rss) (1)
 - programming (rss) (12)
 - project management (rss) (1)
 - python (rss) (5)
 - quicklinks (rss) (6)
 - raspberry pi (rss) (2)
 - redmine (rss) (1)
 - reveal.js (rss) (1)
 - ruby (rss) (10)
 - sbcl (rss) (2)
 - security (rss) (1)
 - shell (rss) (2)
 - smtp (rss) (1)
 - solr (rss) (1)
 - statistics (rss) (2)
 - tips (rss) (10)
 - tmux (rss) (3)
 - toml (rss) (1)
 - tools (rss) (1)
 - twitter (rss) (1)
 - ubuntu (rss) (1)
 - unix (rss) (5)
 - v8 (rss) (1)
 - web (rss) (7)
 - xcode (rss) (1)
 - zeromq (rss) (2)
 
Archives
- August 2015 (1)
 - April 2015 (2)
 - March 2015 (1)
 - December 2014 (1)
 - October 2014 (1)
 - July 2014 (3)
 - March 2014 (6)
 - February 2014 (4)
 - November 2013 (3)
 - October 2013 (4)
 - September 2013 (2)
 - July 2013 (2)
 - June 2013 (2)
 - May 2013 (1)
 - April 2013 (6)
 - March 2013 (3)
 - February 2013 (8)
 - January 2013 (5)
 - December 2012 (1)
 - November 2012 (6)
 - October 2012 (7)
 - August 2012 (1)
 - July 2012 (9)
 - June 2012 (1)
 - April 2012 (1)
 - December 2011 (2)
 - November 2011 (2)