web analytics
首页 > 杂项资源, 轶事趣闻 > C语言和sh脚本的杂交代码

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

2009年11月19日 发表评论 阅读评论 4,771 人阅读    

在网上看到了一个把 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!
$

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

(转载本站文章请注明作者和出处 酷壳 – CoolShell.cn ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——
分类: 杂项资源, 轶事趣闻 标签: ,
好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 4.67 )
Loading ... Loading ...
  1. 2009年11月19日15:23 | #1

    哈,好玩,确实有趣的。

  2. 2009年11月20日07:46 | #2

    tricky

  3. 阿拉
    2009年11月20日15:17 | #3

    很有意思!!

  4. ostric
    2009年11月21日13:03 | #4

    目前还看不出来有什么实际用途

  5. 尼欧
    2009年12月2日01:51 | #5

    语言杂交代码还是有点用处的,我以前写过的一个 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

  6. 2010年6月25日17:08 | #6

    嗯,我现在不会sh

  7. 2010年6月28日17:26 | #7

    我聊

  8. 2010年11月24日08:37 | #8

    高明, 利用不同语言注释语句的不同来混编, 佩服。

  1. 2011年2月23日13:51 | #1
  2. 2013年11月16日00:01 | #2