易截截图软件、单文件、免安装、纯绿色、仅160KB

使用C语言扩展Python(一)

开发环境:Ubuntu9.10,python2.6,gcc4.4.11,ubuntu下的python运行包和开发包是分开的,因此需要在新利得里面安装python-all-dev,从而可以在代码中引用python的头文件和库。2.下面是一个最简单的可以供python调用的c扩展模块,假设c程序文件名为foo.c:代码#include <Python.h>
static PyObject* foo_bar(PyObject* self, PyObject* args) {
    Py_RETURN_NONE;
}
static PyMethodDef foo_methods[] = {
    {"bar",(PyCFunction)foo_bar,METH_NOARGS,NULL},
    {NULL,NULL,0,NULL}
};
PyMODINIT_FUNC initfoo() {
    Py_InitModule3("foo", foo_methods, "My first extension module.");
}      我们可以将上述模块分成3个部分:1)c模块想对外暴露的接口函数。2)提供给外部的python程序使用的一个c模块函数名称映射表。3)c模块的初始化函数。模块的第一行将Python.h引入到模块中,这个文件将使得你的模块可以hook进python的解释器,从而可以为外部的python程序所使用。c模块中的函数签名一般有下列三种形式:PyObject* MyFunction(PyObject* self, PyObject* args);
PyObject* MyFunctionWithKeywords(PyObject* self, PyObject* args, PyObject* kw);
PyObject* MyFunctionWithNoArgs(PyObject* self);      一般我们使用的是第一种方式,函数的参数将会一个元组(tuple)的形式传进来,因此我们在c模块的函数中需要对其进行解析。Python中不能象c语言一样声明一个void类型的函数,如果你不想函数返回一个值的话,那就返回一个NONE,在这里我们可以通过Python头文件中的一个宏Py_RETURN_NONE来实现。C模块中的函数名称其实对外部来说是不可见的,因此可以随便你命名,一般我们可以使用static函数(这在C语言里表示在当前文件以外是不可见的)。本文函数命名方式采用模块名加上函数名,例如foo_bar,这表示在模块foo中会有一个bar函数。然后就是函数映射表了,它是一个PyMethodDef结构体数组,struct PyMethodDef {
    char* ml_name;
    PyCFunction ml_meth;
 &nb


相关文档:

交换连个对象的值(C/C++?JAVA)

如何交换两个变量的值:
C语言中的传值代码如下:
int change(int x,int y)
{
int temp=x;
x=y;
y=temp;
}
C语言中的传址代码如下:
int change(int *p,int *q)
{
int temp=*p;
*p=*q;
*q=temp;
}
使用C++中的引用类型代码如下:
int change(int &x,int &y)
{
int temp=x;
x=y;
y=temp;
}
JAV ......

C/C++内存分配


#include <iostream>
using namespace std;
void main()
{
 char *p,*q;
 p = "abcde";
 q = p + 3;
 *q = 't';
 cout<<p<<endl;
 cout<<q<<endl;
}
两种语言编译都可以通过
当执行到
 *q = 't';
时,C++程序出现内存访问错误,C程序可� ......

【C\C++语言入门篇】 位运算


回顾之前的篇幅,C语言的主体部分基本已经介绍完了。之所以没有介绍C++的相关特性是因为在之前的文章中C和C++在这些方面都有共性,所以在面向对象之前。我们先把这些共性给介绍完。也就是说在介绍面向对象之前,所有的文章都是CC++中都能使用的。从这点上来看,现在正极力奋斗于C++战线上的初学者还是很有用处的。
本篇� ......

linux 2.6.24在S3C2410上的移植(1)(基于GEC2410)

1.下载linux kernel源代码
到http://www.kernel.org/下载linux内核源代码,这里我们使用2.6.24.4的内核.
解压linux-2.6.24.4.tar.bz2
[matt@localhost GEC2410]$ tar -xvjf linux-2.6.24.4.tar.bz2
[matt@localhost GEC2410]$ cd linux-2.6.24.4
2.修改Makefile,设置交叉编译器
ARCH  ?= arm
CROSS_COMPILE ......

Python 中文字符串的截取

def
subString
(s,
length):
   
us = unicode(s, 'utf-8
')
    gs =
us.encode('gb2312
')
    n = int(length)
   
t = gs[:n]
    while True
:
        try
:
  &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号