易截截图软件、单文件、免安装、纯绿色、仅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++ 宏带来的奇技淫巧

作者:Kevin Lynx 来源:C++博客
转自:http://www.kuqin.com/language/20080319/4797.html
众多C++书籍都忠告我们C语言宏是万恶之首,但事情总不如我们想象的那么坏,就如同goto一样。宏有
一个很大的作用,就是自动为我们产生代码。如果说模板可以为我们产生各种型别的代码(型别替换),
那么宏其实可以为我们在符号上产生新的代码(即符号替换、增加)。
关于宏的一些语法问题,可以在google上找到。相信我,你对于宏的了解绝对没你想象的那么多。如果你
还不知道#和##,也不知道prescan,那么你肯定对宏的了解不够。
我稍微讲解下宏的一些语法问题(说语法问题似乎不妥,macro只与preprocessor有关,跟语义分析又无关):
1. 宏可以像函数一样被定义,例如:
   #define min(x,y) (x<y?x:y) //事实上这个宏存在BUG
   但是在实际使用时,只有当写上min(),必须加括号,min才会被作为宏展开,否则不做任何处理。
  
2. 如果宏需要参数,你可以不传,编译器会给你警告(宏参数不够),但是这会导致错误。如C++书籍中所描
   述的,编译器(预处理器)对宏的语法检查不够,所以更多的检查性工作得你自己来做。
3. 很多程序 ......

C/C++ 宏带来的奇技淫巧

作者:Kevin Lynx 来源:C++博客
转自:http://www.kuqin.com/language/20080319/4797.html
众多C++书籍都忠告我们C语言宏是万恶之首,但事情总不如我们想象的那么坏,就如同goto一样。宏有
一个很大的作用,就是自动为我们产生代码。如果说模板可以为我们产生各种型别的代码(型别替换),
那么宏其实可以为我们在符号上产生新的代码(即符号替换、增加)。
关于宏的一些语法问题,可以在google上找到。相信我,你对于宏的了解绝对没你想象的那么多。如果你
还不知道#和##,也不知道prescan,那么你肯定对宏的了解不够。
我稍微讲解下宏的一些语法问题(说语法问题似乎不妥,macro只与preprocessor有关,跟语义分析又无关):
1. 宏可以像函数一样被定义,例如:
   #define min(x,y) (x<y?x:y) //事实上这个宏存在BUG
   但是在实际使用时,只有当写上min(),必须加括号,min才会被作为宏展开,否则不做任何处理。
  
2. 如果宏需要参数,你可以不传,编译器会给你警告(宏参数不够),但是这会导致错误。如C++书籍中所描
   述的,编译器(预处理器)对宏的语法检查不够,所以更多的检查性工作得你自己来做。
3. 很多程序 ......

C Runtime Library来历, API, MFC, ATL关系

CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CRT的源码,不仅有C的,也有C++的。
       CRT原先的目的就是支持操作系统的运行。因为Windows操作系统除汇编部分外,都是用C/C++编写的,所以内核及许多关键服务都在CRT上运行(它们都采用dll技术动态链接)。此外,用 VC编写的C/C++程序也用到它们(可以动态链接,也可以静态链接,前者运行时需要系统中已安装CRT的dll,后者不需要)。可以说,CRT就是 Microsoft编写Windows时使用的低层类库。然后,它又被当作C++标准库的一个实现包含在了VC系列中;我们在VC中使用的C++标准库,其实就是CRT的一个真子集(少了C++标准所不包含的代码,特别是大量的低层C代码)
       至于CRT与WINDOWS API的关系,与许多人理解的相反,WINDOWS API作为Windows的一部份,是在CRT的基础上开发的。你可以将Windows(及其API)看作一个项目,而这个项目使用的语言是汇编/C/C ++,使用的类库就是CRT。所以,离开CRT,W ......

C++ 调C C调c++

一、c++ 调C:
/* c语言头文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
#ifdef __cplusplus
extern "C"
{
#endif
int add(int x,int y);
#ifdef __cplusplus
}
#endif
 
#endif
/* c语言实现文件:cExample.c */
#include "cExample.h"
int add( int x, int y )
{
 return x + y;
}
// main.cpp
#include <iostream>
using namespace std;
// c++实现文件,调用add()
#include "cExample.h"
 
int main(int argc, char* argv[])
{
 cout << add(2,3) << endl;
 return 0;
}
二、C调C++
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
#ifdef __cplusplus
extern "C"
{
#endif
 int add(int x,int y);
#ifdef __cplusplus
}
#endif
#endif
//C++实现文件 cppExample.cpp
#include "cppExample.h"
int add( int x, int y )
{
return x + y;
}
/* C实现文件 */
#include <stdio.h>
#include "cppExample.h"
int main( int argc, char* argv[] )
{
  printf ("%d\n", add( 2, 3 ));
 return 0;
......

C++ 调C C调c++

一、c++ 调C:
/* c语言头文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
#ifdef __cplusplus
extern "C"
{
#endif
int add(int x,int y);
#ifdef __cplusplus
}
#endif
 
#endif
/* c语言实现文件:cExample.c */
#include "cExample.h"
int add( int x, int y )
{
 return x + y;
}
// main.cpp
#include <iostream>
using namespace std;
// c++实现文件,调用add()
#include "cExample.h"
 
int main(int argc, char* argv[])
{
 cout << add(2,3) << endl;
 return 0;
}
二、C调C++
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
#ifdef __cplusplus
extern "C"
{
#endif
 int add(int x,int y);
#ifdef __cplusplus
}
#endif
#endif
//C++实现文件 cppExample.cpp
#include "cppExample.h"
int add( int x, int y )
{
return x + y;
}
/* C实现文件 */
#include <stdio.h>
#include "cppExample.h"
int main( int argc, char* argv[] )
{
  printf ("%d\n", add( 2, 3 ));
 return 0;
......

python31与C交互

1.c调用python:
   实例代码:
main.c调用test.py的
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//main.c
#include <windows.h>
#include <python.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
     Py_Initialize() ;//initialize the python system
    PyObject * py= PyImport_ImportModule("test");
    Py_Finalize();//Finalize  the python system
}
    
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ......

python31与C交互

1.c调用python:
   实例代码:
main.c调用test.py的
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//main.c
#include <windows.h>
#include <python.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
     Py_Initialize() ;//initialize the python system
    PyObject * py= PyImport_ImportModule("test");
    Py_Finalize();//Finalize  the python system
}
    
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ......

C中括号优先级的思考

问题源于论坛的一道题目:
http://topic.csdn.net/u/20100216/21/ec98464e-a47e-4263-bb1c-a001e130ba87.html
下面是问题:
设int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
答案为什么是:8,8
问题的焦点也落在printf执行的问题上,到底先执行谁,后执行谁, 还有部分有才青年将该问题中庸化,觉得跟编译器有关。
执行的顺序真的跟编译器有关吗? 后面再讨论这个问题。
printf执行的问题, 完全可以归结函数执行顺序的通用问题, 所以,用例子来将该问题抽象化:
 #include <stdio.h>
int left()
{
printf("left \n");
return 0;
}
int right()
{
printf("right \n");
return 0;
}
int myFunction(int a, int b)
{
return 0;
}
int main()
{
myFunction(left(),right());
}
执行的结果是:
right
left
从中可以看出来, 括号中(理解为函数即可), 执行的顺序是先从右边,再从左边。
现在,再考虑编译器的影响, 我们说的编译器不是你自家开发的编译器, 这个世界上总有些BT的机构, 可能也会开发一个编译器,可能也搞些非常BT的功能(类似于咱移动喜欢 ......

C/C++编程必备

Windows C 程序设计入门与提高
http://download.chinaitlab.com/program/files/13246.html
单片机C语言入门
http://download.chinaitlab.com/program/files/12907.html
C++ 入门基础教程
http://download.chinaitlab.com/program/files/7617.html
C语言常用算法源代码
http://download.chinaitlab.com/program/files/12893.html
C常用算法程序集
http://download.chinaitlab.com/program/files/6225.html
C++ 语言命令详解
http://download.chinaitlab.com/program/files/4556.html
C语言编程要点
http://download.chinaitlab.com/program/files/11823.html
C语言编程基础
http://download.chinaitlab.com/program/files/11074.html
Borland c++使用手册
http://download.chinaitlab.com/program/files/4553.html
C语言数值算法程序大全(第二版)
http://download.chinaitlab.com/program/files/9247.html
Borland c++4.0安装与使用
http://download.chinaitlab.com/program/files/4546.html
C++ Builder 5.0经典入门
http://download.chinaitlab.com/program/files/4438.html
非C程序员C++入门自学教程
http://download.chinaitlab.com/program/file ......

C/C++编程必备

Windows C 程序设计入门与提高
http://download.chinaitlab.com/program/files/13246.html
单片机C语言入门
http://download.chinaitlab.com/program/files/12907.html
C++ 入门基础教程
http://download.chinaitlab.com/program/files/7617.html
C语言常用算法源代码
http://download.chinaitlab.com/program/files/12893.html
C常用算法程序集
http://download.chinaitlab.com/program/files/6225.html
C++ 语言命令详解
http://download.chinaitlab.com/program/files/4556.html
C语言编程要点
http://download.chinaitlab.com/program/files/11823.html
C语言编程基础
http://download.chinaitlab.com/program/files/11074.html
Borland c++使用手册
http://download.chinaitlab.com/program/files/4553.html
C语言数值算法程序大全(第二版)
http://download.chinaitlab.com/program/files/9247.html
Borland c++4.0安装与使用
http://download.chinaitlab.com/program/files/4546.html
C++ Builder 5.0经典入门
http://download.chinaitlab.com/program/files/4438.html
非C程序员C++入门自学教程
http://download.chinaitlab.com/program/file ......
总记录数:2015; 总页数:336; 每页6 条; 首页 上一页 [117] [118] [119] [120] 121 [122] [123] [124] [125] [126]  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号