C言語でのクワインの例を示す。ここでは、コードを文字列として格納しており、コード部と文字列自身の2回の出力を行う。/* A simple quine (self-printing program), in standard C. *//* Note: in designing this quine, we have tried to make the code clear * and readable, not concise and obscure as many quines are, so that * the general principle can be made clear at the expense of length. * In a nutshell: use the same data structure (called "progdata" * below) to output the program code (which it represents) and its own * textual representation. */#include <stdio.h>void quote(const char *s)     /* This function takes a character string s and prints the      * textual representation of s as it might appear formatted      * in C code. */{    int i;    printf("    \"");    for (i=0; s[i]; ++i) {        /* Certain characters are quoted. */        if (s[i] == '\\')            printf("\\\\");        else if (s[i] == '"')            printf("\\\"");        else if (s[i] == '\n')            printf("\\n");        /* Others are just printed as such. */        else            printf("%c", s[i]);        /* Also insert occasional line breaks. */        if (i % 48 == 47)            printf("\"\n    \"");    }    printf("\"");}/* What follows is a string representation of the program code, * from beginning to end (formatted as per the quote() function * above), except that the string _itself_ is coded as two * consecutive '@' characters. */const char progdata[] =    "/* A simple quine (self-printing program), in st"    "andard C. */\n\n/* Note: in designing this quine, "    "we have tried to make the code clear\n * and read"    "able, not concise and obscure as many quines are"    ", so that\n * the general principle can be made c"    "lear at the expense of length.\n * In a nutshell:"    " use the same data structure (called \"progdata\"\n"    " * below) to output the program code (which it r"    "epresents) and its own\n * textual representation"    ". */\n\n#include <stdio.h>\n\nvoid quote(const char "    "*s)\n     /* This function takes a character stri"    "ng s and prints the\n      * textual representati"    "on of s as it might appear formatted\n      * in "    "C code. */\n{\n    int i;\n\n    printf(\"    \\\"\");\n "    "   for (i=0; s[i]; ++i) {\n        /* Certain cha"    "racters are quoted. */\n        if (s[i] == '\\\\')"    "\n            printf(\"\\\\\\\\\");\n        else if (s["    "i] == '\"')\n            printf(\"\\\\\\\"\");\n        e"    "lse if (s[i] == '\\n')\n            printf(\"\\\\n\");"    "\n        /* Others are just printed as such. */\n"    "        else\n            printf(\"%c\", s[i]);\n   "    "     /* Also insert occasional line breaks. */\n "    "       if (i % 48 == 47)\n            printf(\"\\\"\\"    "n    \\\"\");\n    }\n    printf(\"\\\"\");\n}\n\n/* What fo"    "llows is a string representation of the program "    "code,\n * from beginning to end (formatted as per"    " the quote() function\n * above), except that the"    " string _itself_ is coded as two\n * consecutive "    "'@' characters. */\nconst char progdata[] =\n@@;\n\n"    "int main(void)\n     /* The program itself... */\n"    "{\n    int i;\n\n    /* Print the program code, cha"    "racter by character. */\n    for (i=0; progdata[i"    "]; ++i) {\n        if (progdata[i] == '@' && prog"    "data[i+1] == '@')\n            /* We encounter tw"    "o '@' signs, so we must print the quoted\n       "    "      * form of the program code. */\n        {\n "    "           quote(progdata);    /* Quote all. */\n"    "            i++;                /* Skip second '"    "@'. */\n        } else\n            printf(\"%c\", p"    "rogdata[i]);  /* Print character. */\n    }\n    r"    "eturn 0;\n}\n";int main(void)     /* The program itself... */{    int i;    /* Print the program code, character by character. */    for (i=0; progdata[i]; ++i) {        if (progdata[i] == '@' && progdata[i+1] == '@')            /* We encounter two '@' signs, so we must print the quoted             * form of the program code. */        {            quote(progdata);    /* Quote all. */            i++;                /* Skip second '@'. */        } else            printf("%c", progdata[i]);  /* Print character. */    }    return 0;}もう1つの例は、C のプリプロセッサを使ったものである。#include <stdio.h>int main(int argc, char** argv){#define B(x) x; printf("  B(" #x ")\n");#define A(x) printf("  A(" #x ")\n"); x;  B(printf("#include <stdio.h>\nint main(int argc, char** argv)\n{\n#define B(x)     x; printf(\"  B(\" #x \")\\n\");\n#define A(x) printf(\"  A(\" #x \")\\n\"); x;\n"))  A(printf("}\n"))}この例では、B(printf( で始まる行は次の行と繋がっている（見やすくするため2行で表示した）。argv)\n{\n#define B(x) と x; の間には空白が1つある。プロプロセッサを使わずに、printf 関数を利用して注意深く書式文字列と置換パラメータを配置することで、さらに短いプログラムを書くこともできる。以下の例で、34 というのはダブルクオート文字のASCIIコードであり、文字列リテラル内のダブルクオートを引用する必要を防ぐために使われている。int main() { char *s = "int main() { char *s = %c%s%c; printf(s, 34, s, 34); }"; printf(s, 34, s, 34); }