易截截图软件、单文件、免安装、纯绿色、仅160KB
热门标签: c c# c++ asp asp.net linux php jsp java vb Python Ruby mysql sql access Sqlite sqlserver delphi javascript Oracle ajax wap mssql html css flash flex dreamweaver xml
 最新文章 : c

函数的解析之C/C++

      函数是程序的执行模块,是整个项目的细胞,如何组织好每一个函数的结构,如何提高程序的可读性和运行效率,是程序员们不断品味的主体。有时函数的设计能直接体现出程序员对C/C++的理解和感悟。
      C/C++的函数类型不对外乎以下几种,有些描述可能不太贴切:
      一般函数,函数重载,虚函数,函数模板,内联函数,静态函数,回调函数,宏定义实现函数效果。
1. 函数重载:
    编译时根据参数进行重载解析,执行和一般的函数一样。无附加效率开销,只是编译期间价格表之区分参数和返回而已。
2. 虚函数:
    对于满足多态的有运行时开销,对于其它的,和普通成员函数一样。运行时多态,这时候会因为虚表的维护而变慢,这是面向对象编程相对于纯C主要的开销增加。
3. 函数模板:
    显示或者隐式实例化,非成员模板函数的和非成员函数一样,成员模板函数和成员函数一样。虚函数是运行时多态,你可以把模板理解为“编译期多态”,会根据你的调用实现多个函数体,增加体积开销,但效率高,因为就和普通函数 ......

函数的解析之C/C++

      函数是程序的执行模块,是整个项目的细胞,如何组织好每一个函数的结构,如何提高程序的可读性和运行效率,是程序员们不断品味的主体。有时函数的设计能直接体现出程序员对C/C++的理解和感悟。
      C/C++的函数类型不对外乎以下几种,有些描述可能不太贴切:
      一般函数,函数重载,虚函数,函数模板,内联函数,静态函数,回调函数,宏定义实现函数效果。
1. 函数重载:
    编译时根据参数进行重载解析,执行和一般的函数一样。无附加效率开销,只是编译期间价格表之区分参数和返回而已。
2. 虚函数:
    对于满足多态的有运行时开销,对于其它的,和普通成员函数一样。运行时多态,这时候会因为虚表的维护而变慢,这是面向对象编程相对于纯C主要的开销增加。
3. 函数模板:
    显示或者隐式实例化,非成员模板函数的和非成员函数一样,成员模板函数和成员函数一样。虚函数是运行时多态,你可以把模板理解为“编译期多态”,会根据你的调用实现多个函数体,增加体积开销,但效率高,因为就和普通函数 ......

linux c语言 select函数用法

  Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等
待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。
可是使用Select就可以完成非阻塞(所谓非阻塞方式non- block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作的程序,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。
下面详细介绍一下!
Select的函数格式(我所说的是Unix系统下的伯克利socket编程,和windows下的有区别,一会儿说明):
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);
先说明两个结构体:
第一,struct fd_set可以理解为一个集合,这个集合中存放的是文件描述符(filedescriptor),即文件 ......

linux c语言 select函数用法

  Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等
待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。
可是使用Select就可以完成非阻塞(所谓非阻塞方式non- block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作的程序,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。
下面详细介绍一下!
Select的函数格式(我所说的是Unix系统下的伯克利socket编程,和windows下的有区别,一会儿说明):
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);
先说明两个结构体:
第一,struct fd_set可以理解为一个集合,这个集合中存放的是文件描述符(filedescriptor),即文件 ......

c连接符

c语言宏定义的连接符有哪些
[此问题的推荐答案]
(一)宏定义中的## 连接符与# 符
## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。
假设程序中已经定义了这样一个带参数的宏:
#define paster( n ) printf( "token" #n " = %d", token##n )
同时又定义了一个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
paster( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
(二)"\"与一个较长占多行的宏
宏定义中允许包含两行以 ......

C/C++单元测试理论精要(九)

3.2 高效率测试:四两拔千斤
 
    上一节介绍了一些似是而非的高效率方法,那么,怎样才能真正高效率测试呢?真正的高效率,不能忽略人的智慧这一关键因素。
由于工具不可能自动了解代码的设计功能,只有人才了解,因此,只有人的智慧及时介入,工具才能做正确的事情,才能达到真正的高效率。
    测试的主要工作在于用例,这方面,工具可以完成大量自动化的工作,主要包括:生成测试代码,生成测试用例,找出遗漏用例。
生成测试代码
    生成过程应该支持人工及时介入,指定需要初始化和判断输出的数据,这样,就可以避免遗漏,也可以避免生成垃圾。
   
   
    
    上图是生成测试代码的界面,人工可以指定需要初始化和判断输出的数据。
生成测试用例
    要高效率的建立和管理用例,应该将数据和代码分离,用数据表格的方式来建立和管理用例。为了进一步提高效率,工具应该支持无需编码的表格化。
   
    上图是数据表格界面。数据可以自动移到表格中,包括外部输入、内部输入 ......

C/C++单元测试理论精要(九)

3.2 高效率测试:四两拔千斤
 
    上一节介绍了一些似是而非的高效率方法,那么,怎样才能真正高效率测试呢?真正的高效率,不能忽略人的智慧这一关键因素。
由于工具不可能自动了解代码的设计功能,只有人才了解,因此,只有人的智慧及时介入,工具才能做正确的事情,才能达到真正的高效率。
    测试的主要工作在于用例,这方面,工具可以完成大量自动化的工作,主要包括:生成测试代码,生成测试用例,找出遗漏用例。
生成测试代码
    生成过程应该支持人工及时介入,指定需要初始化和判断输出的数据,这样,就可以避免遗漏,也可以避免生成垃圾。
   
   
    
    上图是生成测试代码的界面,人工可以指定需要初始化和判断输出的数据。
生成测试用例
    要高效率的建立和管理用例,应该将数据和代码分离,用数据表格的方式来建立和管理用例。为了进一步提高效率,工具应该支持无需编码的表格化。
   
    上图是数据表格界面。数据可以自动移到表格中,包括外部输入、内部输入 ......

SQLite与C结合

SQLite官方网站例子:
#include <stdio.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if( argc!=3 ){
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
exit(1);
}
rc = sqlite3_open(argv[1], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}
用gcc编译
gcc -lsqlite3 sqlite.c -o sqlite
运行时./sqlite ab.db 'SQL 语句'
......

SQLite与C结合

SQLite官方网站例子:
#include <stdio.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if( argc!=3 ){
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
exit(1);
}
rc = sqlite3_open(argv[1], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}
用gcc编译
gcc -lsqlite3 sqlite.c -o sqlite
运行时./sqlite ab.db 'SQL 语句'
......

linux C正则表达式

在网上找到的一个程序
[c]
#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
/* 取子串的函数 */
static char* substr(const char*str,unsigned start, unsigned end)
{
      unsigned n = end - start;
      static char stbuf[256];
      strncpy(stbuf, str + start, n);
      stbuf[n] = 0;
      return stbuf;
}
/* 主程序 */
int main(int argc, char** argv)
{
      char * pattern;
      int x, z, lno = 0, cflags = 0;
      char ebuf[128], lbuf[256];
      regex_t reg;
      regmatch_t pm[10];
      const size_t nmatch = 10;
/* 编译正则表达式*/
      pattern = argv[1]; //获取正则表达式
      z = regcomp(&reg, pattern, cflags); //如果编译成功返回0,其它返回说明有错误产生
   &nb ......

linux C正则表达式

在网上找到的一个程序
[c]
#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
/* 取子串的函数 */
static char* substr(const char*str,unsigned start, unsigned end)
{
      unsigned n = end - start;
      static char stbuf[256];
      strncpy(stbuf, str + start, n);
      stbuf[n] = 0;
      return stbuf;
}
/* 主程序 */
int main(int argc, char** argv)
{
      char * pattern;
      int x, z, lno = 0, cflags = 0;
      char ebuf[128], lbuf[256];
      regex_t reg;
      regmatch_t pm[10];
      const size_t nmatch = 10;
/* 编译正则表达式*/
      pattern = argv[1]; //获取正则表达式
      z = regcomp(&reg, pattern, cflags); //如果编译成功返回0,其它返回说明有错误产生
   &nb ......
总记录数:2015; 总页数:336; 每页6 条; 首页 上一页 [57] [58] [59] [60] 61 [62] [63] [64] [65] [66]  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号