diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for language-c99-simple
 
+## 0.2.2 -- 2022-08-28
+
+* Added support for `sizeof` (#12).
+
+
 ## 0.2.1 -- 2022-08-15
 
 * Bump version number for release (#10).
diff --git a/language-c99-simple.cabal b/language-c99-simple.cabal
--- a/language-c99-simple.cabal
+++ b/language-c99-simple.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                language-c99-simple
-version:             0.2.1
+version:             0.2.2
 synopsis:            C-like AST to simplify writing C99 programs.
 description:
   This package is a wrapper on top of 'language-c99'. It provides a simpler
diff --git a/src/Language/C99/Simple/AST.hs b/src/Language/C99/Simple/AST.hs
--- a/src/Language/C99/Simple/AST.hs
+++ b/src/Language/C99/Simple/AST.hs
@@ -124,6 +124,9 @@
 
           | AssignOp AssignOp Expr Expr
 
+          | SizeOf     Expr
+          | SizeOfType TypeName
+
 data UnaryOp = Inc
              | Dec
              | Ref
diff --git a/src/Language/C99/Simple/Translate.hs b/src/Language/C99/Simple/Translate.hs
--- a/src/Language/C99/Simple/Translate.hs
+++ b/src/Language/C99/Simple/Translate.hs
@@ -201,22 +201,24 @@
 
 transexpr :: Expr -> C.Expr
 transexpr e = case e of
-  Ident     i         -> wrap $ C.PrimIdent $ ident i
-  LitBool   b         -> wrap $ litbool   b
-  LitInt    i         -> wrap $ litint    i
-  LitFloat  f         -> wrap $ litfloat  f
-  LitDouble d         -> wrap $ litdouble d
-  LitString s         -> wrap $ litstring s
-  Index     arr idx   -> wrap $ indexexpr arr idx
-  Funcall   fun args  -> wrap $ funcall   fun args
-  Dot       e   field -> wrap $ dotexpr   e field
-  Arrow     e   field -> wrap $ arrowexpr e field
-  InitVal   ty  init  -> wrap $ initexpr  ty init
-  UnaryOp   op e      -> wrap $ unaryop op e
-  Cast      ty e      -> wrap $ castexpr ty e
-  BinaryOp  op e1 e2  -> binaryop op e1 e2
-  AssignOp  op e1 e2  -> wrap $ assignop op e1 e2
-  Cond      c e1 e2   -> wrap $ condexpr c e1 e2
+  Ident      i         -> wrap $ C.PrimIdent $ ident i
+  LitBool    b         -> wrap $ litbool   b
+  LitInt     i         -> wrap $ litint    i
+  LitFloat   f         -> wrap $ litfloat  f
+  LitDouble  d         -> wrap $ litdouble d
+  LitString  s         -> wrap $ litstring s
+  Index      arr idx   -> wrap $ indexexpr arr idx
+  Funcall    fun args  -> wrap $ funcall   fun args
+  Dot        e   field -> wrap $ dotexpr   e field
+  Arrow      e   field -> wrap $ arrowexpr e field
+  InitVal    ty  init  -> wrap $ initexpr  ty init
+  UnaryOp    op e      -> wrap $ unaryop op e
+  Cast       ty e      -> wrap $ castexpr ty e
+  BinaryOp   op e1 e2  -> binaryop op e1 e2
+  AssignOp   op e1 e2  -> wrap $ assignop op e1 e2
+  Cond       c e1 e2   -> wrap $ condexpr c e1 e2
+  SizeOf     e         -> wrap $ C.UnarySizeExpr (wrap $ transexpr e)
+  SizeOfType ty        -> wrap $ C.UnarySizeType (transtypename ty)
 
 
 unaryop :: UnaryOp -> Expr -> C.UnaryExpr
