本文关键词: c++ 含义
1.引言
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。
2.从标准头文件说起
某企业曾经给出如下的一道面试题:
面试题:为什么标准头文件都有类似以下的结构?
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
分析
显然,头文件中的编译宏“#ifndef __INCvxWorksh、#define __INCvxWorksh、#endif” 的作用是防止该头文件被重复引用。
那么
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
的作用又是什么呢?我们将在下文一一道来。
3.深层揭密extern "C"
extern ......
本文关键词: c++ 含义
1.引言
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。
2.从标准头文件说起
某企业曾经给出如下的一道面试题:
面试题:为什么标准头文件都有类似以下的结构?
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
分析
显然,头文件中的编译宏“#ifndef __INCvxWorksh、#define __INCvxWorksh、#endif” 的作用是防止该头文件被重复引用。
那么
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
的作用又是什么呢?我们将在下文一一道来。
3.深层揭密extern "C"
extern ......
对于C编写程序,大部分都可以通过,但是不会完全兼容,举两个例子:
1.
char *str;
str = malloc(32);
2.
char ch[3] = "abc";
gcc -g -o test test.c
g++ -g -o test test.c
因为C++检查更加严格,C没有这么严格。
大家可以比较一下,gcc不会报错,g++会报错。
如果大家还有新的case,欢迎补充。 ......
对于C编写程序,大部分都可以通过,但是不会完全兼容,举两个例子:
1.
char *str;
str = malloc(32);
2.
char ch[3] = "abc";
gcc -g -o test test.c
g++ -g -o test test.c
因为C++检查更加严格,C没有这么严格。
大家可以比较一下,gcc不会报错,g++会报错。
如果大家还有新的case,欢迎补充。 ......
何为指针 ?
指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。
开始
如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针:
int* pNumberOne;
int* pNumberTwo;
注意到变量名的前缀“p”了吗?这是编写代码的一个习惯,用来表示这个变量是一个指针。
现在,让我们把这些指针指向一些实际的值吧:
pNumberOne = &some_number;
pNumberTwo = &some_other_number;
“&”标志应该读作“the address of(……的地址)”,它的作用是返回一个变量的内存地址,而不是这个变量本身。那么在这个例子中,pNumberOne就是some_number的地址,亦称作pNumberOne指向some_number。
现在,如果我们想使用some_number的地址的话,那么我们就可以使用pNumberOne了。如果我们希望经由pNumberOne而使用some_number的值的话,我们可以用*pN ......
何为指针 ?
指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。
开始
如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针:
int* pNumberOne;
int* pNumberTwo;
注意到变量名的前缀“p”了吗?这是编写代码的一个习惯,用来表示这个变量是一个指针。
现在,让我们把这些指针指向一些实际的值吧:
pNumberOne = &some_number;
pNumberTwo = &some_other_number;
“&”标志应该读作“the address of(……的地址)”,它的作用是返回一个变量的内存地址,而不是这个变量本身。那么在这个例子中,pNumberOne就是some_number的地址,亦称作pNumberOne指向some_number。
现在,如果我们想使用some_number的地址的话,那么我们就可以使用pNumberOne了。如果我们希望经由pNumberOne而使用some_number的值的话,我们可以用*pN ......
今天配置了一下netbeans的c++编译环境,所以写一篇日志备忘,同时也供广大网友参考和学习。
准备资源:
1、netbeans 可以到官方网站下载zh-cn.netbeans.org/
2、MinGW编译器(MinGW中有g++和gcc编译器)点此处下载,可以到我提供的csdn的共享下载,由于大小限制分两部分
地址:第一部分 http://download.csdn.net/source/2252840
3、MSYS 可以点此下载
4、gdb 可以点此下载
开始
准备好上述材料后,就可以进入安装阶段。
首先,安装netbeans,这个不做过多介绍,就按照安装向导一步一步进行,但注意下载的netbeans版本要包含c/c++插件的。
第二,安装MinGW,下载我提供的MinGW,里面有binutils-2.17.50-20060824-1.tar.gz 、 gcc-core-4.2.1-sjlj-2.tar.gz 、gcc-g++-4.2.1-sjlj-2.tar.gz、mingw32-make-3.81-20080326-2.tar.gz、mingwrt-3.15.1-mingw32.tar.gz、mingwrt-3.15.1-mingw32-dev.tar.gz、mingwrt-3.15.1-mingw32-dll.tar.gz、w32api-3.11.tar.gz 八个文件,将所有文件解压到一个文件夹下,如C:\MinGW下,然后将C:\MinGW\bin添加到路径中 并将C:\MinGW\bin下的g++-sjlj.exe文件复制为g++.exe,将C:\MinGW\bin下的gcc-sjlj.exe复制为gcc.exe 此时, ......
今天配置了一下netbeans的c++编译环境,所以写一篇日志备忘,同时也供广大网友参考和学习。
准备资源:
1、netbeans 可以到官方网站下载zh-cn.netbeans.org/
2、MinGW编译器(MinGW中有g++和gcc编译器)点此处下载,可以到我提供的csdn的共享下载,由于大小限制分两部分
地址:第一部分 http://download.csdn.net/source/2252840
3、MSYS 可以点此下载
4、gdb 可以点此下载
开始
准备好上述材料后,就可以进入安装阶段。
首先,安装netbeans,这个不做过多介绍,就按照安装向导一步一步进行,但注意下载的netbeans版本要包含c/c++插件的。
第二,安装MinGW,下载我提供的MinGW,里面有binutils-2.17.50-20060824-1.tar.gz 、 gcc-core-4.2.1-sjlj-2.tar.gz 、gcc-g++-4.2.1-sjlj-2.tar.gz、mingw32-make-3.81-20080326-2.tar.gz、mingwrt-3.15.1-mingw32.tar.gz、mingwrt-3.15.1-mingw32-dev.tar.gz、mingwrt-3.15.1-mingw32-dll.tar.gz、w32api-3.11.tar.gz 八个文件,将所有文件解压到一个文件夹下,如C:\MinGW下,然后将C:\MinGW\bin添加到路径中 并将C:\MinGW\bin下的g++-sjlj.exe文件复制为g++.exe,将C:\MinGW\bin下的gcc-sjlj.exe复制为gcc.exe 此时, ......
step one:将.pc文件预编译为.c
[ecif@localhost zyctest]$ proc sample1.pc
显示信息:
Pro*C/C++: Release 10.2.0.1.0 - Production on Tue Apr 13 14:07:05 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
System default option values taken from: /home/oracle/oracle/product/10.2.0/db_1/precomp/admin /pcscfg.cfg
step two:编译.c文件,生成目标文件
gcc -L$ORACLE_HOME/precomp/public -I/home/oracle/oracle/product/10.2.0/db_1/precomp /public/ -c sample1.c
提示警告:
sample1.c: In function `main':
sample1.c:236: warning: return type of 'main' is not `int'
step three:链接目标文件,生成可执行程序
gcc -L$ORACLE_HOME/lib -lclntsh -o sample1 sample1.o
警告:
sample1.o(.text+0x381): In function `main':
: warning: the `gets' f ......
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
EXEC SQL include sqlca;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20];
VARCHAR password[20];
EXEC SQL END DECLARE SECTION;
void sql_error()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\n Oracle error detected:\n");
printf("\n%.70s\n ......