diff --git a/skeletons/converter-sample.c b/skeletons/converter-sample.c
index aedaaa9..7a61eef 100644
--- a/skeletons/converter-sample.c
+++ b/skeletons/converter-sample.c
@@ -105,41 +105,47 @@
     }
 }
 
-
-#define HAS_CODEC(fname)  ((&(((asn_TYPE_operation_t *)0)->fname)) != 0)
+#define CODEC_OFFSET(fname)  ((ptrdiff_t)&(((asn_TYPE_operation_t *)0)->fname))
 typedef struct {
     const char *name;
     enum asn_transfer_syntax syntax;
-    int has_codec;
+    ptrdiff_t codec_offset;
     const char *full_name;
 } syntax_selector;
 
 static syntax_selector input_encodings[] = {
-    {"ber", ATS_BER, HAS_CODEC(ber_decoder),
+    {"ber", ATS_BER, CODEC_OFFSET(ber_decoder),
      "Input is in BER (Basic Encoding Rules) or DER"},
-    {"oer", ATS_BASIC_OER, HAS_CODEC(oer_decoder),
+    {"oer", ATS_BASIC_OER, CODEC_OFFSET(oer_decoder),
      "Input is in OER (Octet Encoding Rules)"},
-    {"per", ATS_UNALIGNED_BASIC_PER, HAS_CODEC(uper_decoder),
+    {"per", ATS_UNALIGNED_BASIC_PER, CODEC_OFFSET(uper_decoder),
      "Input is in Unaligned PER (Packed Encoding Rules)"},
-    {"xer", ATS_BASIC_XER, HAS_CODEC(xer_decoder),
+    {"xer", ATS_BASIC_XER, CODEC_OFFSET(xer_decoder),
      "Input is in XER (XML Encoding Rules)"},
     {0, ATS_INVALID, 0, 0}};
 
 static syntax_selector output_encodings[] = {
-    {"der", ATS_DER, HAS_CODEC(der_encoder),
+    {"der", ATS_DER, CODEC_OFFSET(der_encoder),
      "Output as DER (Distinguished Encoding Rules)"},
-    {"oer", ATS_CANONICAL_OER, HAS_CODEC(oer_encoder),
+    {"oer", ATS_CANONICAL_OER, CODEC_OFFSET(oer_encoder),
      "Output as Canonical OER (Octet Encoding Rules)"},
-    {"per", ATS_UNALIGNED_CANONICAL_PER, HAS_CODEC(uper_encoder),
+    {"per", ATS_UNALIGNED_CANONICAL_PER, CODEC_OFFSET(uper_encoder),
      "Output as Unaligned PER (Packed Encoding Rules)"},
-    {"xer", ATS_BASIC_XER, HAS_CODEC(xer_encoder),
+    {"xer", ATS_BASIC_XER, CODEC_OFFSET(xer_encoder),
      "Output as XER (XML Encoding Rules)"},
-    {"text", ATS_NONSTANDARD_PLAINTEXT, HAS_CODEC(print_struct),
+    {"text", ATS_NONSTANDARD_PLAINTEXT, CODEC_OFFSET(print_struct),
      "Output as plain semi-structured text"},
-    {"null", ATS_INVALID, HAS_CODEC(print_struct),
+    {"null", ATS_INVALID, CODEC_OFFSET(print_struct),
      "Verify (decode) input, but do not output"},
     {0, ATS_INVALID, 0, 0}};
 
+static int
+has_codec_defined(const asn_TYPE_descriptor_t *td,
+                  const syntax_selector *element) {
+    return *(const void *const *)(const void *)((const char *)td->op
+                                                + element->codec_offset) != 0;
+}
+
 /*
  * Select ASN.1 Transfer Enocoding Syntax by command line name.
  */
@@ -149,9 +155,7 @@
     const syntax_selector *element;
     for(element = first_element; element->name; element++) {
         if(strcmp(element->name, name) == 0) {
-            if(td && td->op
-               && *(const void *const *)(const void *)((const char *)td->op
-                                                       + element->has_codec)) {
+            if(td && td->op && has_codec_defined(td, element)) {
                 return element;
             }
         }
