用python写c
Project description
用python写c语言
import l0n0lc as lc
import os
import ctypes
if not os.path.exists('./l0n0lcoutput'):
os.mkdir('l0n0lcoutput')
fp = open('l0n0lcoutput/helloworld.cpp', 'w')
lc.配置输出函数(fp.write)
lc.c_include('stdio.h')
lc.c_include('stdlib.h')
with lc.如果没有定义('hahaha'):
lc.c_define('hahaha', '2')
@lc.c_函数(前缀=['extern "C"'])
def test_add(a: lc.c_i32, b: lc.c_i32) -> lc.c_i32:
with lc.如果(a.大于(100)) as f:
a(10)
with lc.否则如果(a.等于(10)):
a(100)
with lc.否则():
a(1000)
return a + b # type: ignore
@lc.c_函数()
def main(argc: lc.c_i32, argv: lc.c_char_p_p) -> lc.c_i32:
c =lc.c_i32(test_add(1, 2))
lc.输出(f'printf("Hello World! c = %d\\n", {c});\n')
lc.输出('printf("Hello World!\\n");\n')
with lc.如果定义了('hahaha'):
lc.输出('printf("哈哈哈!\\n");\n')
with lc.宏如果('hahaha == 1') as c:
lc.输出('printf("111!\\n");\n')
c.否则如果('hahaha == 2')
lc.输出('printf("否则2!\\n");\n')
c.否则()
lc.输出('printf("否则!\\n");\n')
i = lc.c_i32(0)
with lc.循环(i.小于(argc)):
lc.输出(f'printf("i = %d, v = %s\\n", {i}, {argv[i]});\n')
i += 1
return 0 # type: ignore
fp.close()
cm = lc.编译()
cm.编译文件('l0n0lcoutput/helloworld.cpp', 'l0n0lcoutput/helloworld')
os.system('./l0n0lcoutput/helloworld 1 2')
cm.编译为动态库('l0n0lcoutput/helloworld.cpp', 'l0n0lcoutput/libhelloworld.so')
path = f'{os.getcwd()}/l0n0lcoutput/libhelloworld.so'
print(path)
libhelloworld = ctypes.CDLL(path)
libhelloworld.test_add.argtypes=[ctypes.c_int32, ctypes.c_int32]
libhelloworld.test_add.restype = ctypes.c_int32
a = libhelloworld.test_add(300, 6)
print(a)
a = libhelloworld.test_add(10, 6)
print(a)
a = libhelloworld.test_add(1, 6)
print(a)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
l0n0lc-0.2.0.tar.gz
(8.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file l0n0lc-0.2.0.tar.gz.
File metadata
- Download URL: l0n0lc-0.2.0.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
522f0d829ef5b8bab3435b63d3d29a492981d24f9296dd1b1e81ee7f47f31aba
|
|
| MD5 |
a833f7a3390df28ee177286666ab1e55
|
|
| BLAKE2b-256 |
2cc600c91c353ee6075cb14d270299486c86e8332d7924fd31f575187eac4c4e
|
File details
Details for the file l0n0lc-0.2.0-py3-none-any.whl.
File metadata
- Download URL: l0n0lc-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6a0624edba9b95dee7c7dae7b3e4730f27de106a1d9c601734dbd09d0b51e4e
|
|
| MD5 |
0fbcc16192c81e94183cb26d97582f04
|
|
| BLAKE2b-256 |
f481cee5b61189d78991eb1ec885f2728ac28cd70622b82f532f8da7b3f9986c
|