C语言和sh脚本的杂交代码

C语言和sh脚本的杂交代码

在网上看到了一个把 C语言和bash杂并起来的例子,这个示子如下所示。在下面这个例子中,我们把脚本用#if 0这个预编译给起来,这样就不会让其编译到C语言中了。

#if 0
echo "Hello from bash!"
exit
#endif
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
  puts("Hello from C!");
  return EXIT_SUCCESS;
}

下面,让我看看如果来使用这样的程序:

$ sh test.sh.c
Hello from bash!
$ gcc test.sh.c -o test
$ ./test
Hello from C!

你甚至还可以做一个自我编译,并自我运行的源代码。如下所示:

#if 0
file=`mktemp`
gcc -o $file $0
$file
rm $file
exit
#endif
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
  puts("Hello from C!");
  return EXIT_SUCCESS;
}

运行:

$ sh test.sh.c
Hello from C!
$

当然,我并不建议你在真正的开发环境中这样使用,我只不过是在介绍一个比较有趣的用法,仅此而已!

(转载本站文章请注明作者和出处 宝酷 – sou-ip ,请勿用于任何商业用途)

好烂啊有点差凑合看看还不错很精彩 (16 人打了分,平均分: 3.75 )
Loading...

C语言和sh脚本的杂交代码》的相关评论

  1. 语言杂交代码还是有点用处的,我以前写过的一个 python & c++ 杂交代码
    这个文件名是 char_test.cpp 使用之前先要运行 python char_test.cpp 生成测试表
    这样做,有新的字符测试项目,很容易添加进去

    #include “char_test.hpp” /*

    tbl = [ 0 for i in range(256) ]

    def char_set(table, count, first, bits):
    for i in range(count):
    table[ord(first) + i] += bits

    char_set(tbl, 1, ”, 1)
    char_set(tbl, 10, ‘0’, 2)
    char_set(tbl, 6, ‘a’, 4)
    char_set(tbl, 6, ‘A’, 4)
    char_set(tbl, 26, ‘a’, 8)
    char_set(tbl, 26, ‘A’, 16)

    for i in ‘ \t\r\n’:
    tbl[ord(i)] += 32

    lines = []
    for i in range(32):
    line = []
    for j in range(8):
    line.append(‘0x%02x’ % tbl[8 * i + j])
    lines.append(‘, ‘.join(line))

    table = ‘ ‘ + ‘,\n ‘.join(lines)

    import sys, string

    try:
    fp = open(sys.argv[0], ‘r’)
    lines = map(string.rstrip, fp.readlines())
    head = lines.index(‘// python process head’)
    tail = lines.index(‘// python process tail’)
    txt = ‘\n’.join(lines[:head + 1] + [ table ] + lines[tail:])
    fp.close()

    fp = open(sys.argv[0], ‘w’)
    fp.write(txt + ‘\n’)
    fp.close()
    except IOError:
    sys.exit(1)

    sys.exit(0)

    ”’ */

    using namespace std;
    int char_test::table[] = {
    // python process head
    // python process tail
    };

    // ”’

    @ostric

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注