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 ,请勿用于任何商业用途)
《C语言和sh脚本的杂交代码》的相关评论
哈,好玩,确实有趣的。
tricky
很有意思!!
目前还看不出来有什么实际用途
语言杂交代码还是有点用处的,我以前写过的一个 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
嗯,我现在不会sh
我聊
高明, 利用不同语言注释语句的不同来混编, 佩服。