- extern "C"
- 使用场景
- C++调用C的静态库:
- VS2019创建静态库步骤
- 测试文件配置静态库
- C程序调用C++的库
- 总结:
- 测试代码:有效的括号
有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern “C”,意思是告诉编译器,将该函数按照C语言规则来编译.比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree两个接口来使用,但如果是C项目就没办法使用,那么他就使用extern “C”来解决.
使用场景
我们在C++中需要调用C的库 或者 C中调用C++的库时会需要使用 extern "C"
C++调用C的静态库: VS2019创建静态库步骤
测试文件配置静态库
C程序调用C++的库
__cplusplus 是C++文件的默认定义的标识符, 这里使用的是条件编译
#ifdef _cplusplus
extern "C"
{
#ifdef _cplusplus //为了把右括号匹配上
}
#endif
如果是C++程序:
如果是C语言的程序:
C语言程序调用展示:
C++程序调用展示:
总结:
__cpp那个标识符 不用加头文件,默认C++文件就会有这个东西
编译器编译的时候,默认就把这个宏标识加上
可以用于区分是c++程序还是c程序
测试代码:有效的括号
bool isValid(char * s)
{
//空字符串
if(*s == ')'return
{
; false}
//空指针
if
(==s NULL )return
{
; false}
;
ST st//创建栈StackInit
(&)st;//栈初始化//遍历字符串
while
(*)s//碰到左括号就进栈
{
if
(*==s '{' ||
* ==s '[' ||
* ==s '(' )StackPush
{
(&,st*)s;++
s;}
else
//碰到右括号,出栈顶的左括号进行匹配
{
if
//如果栈中没有左括号了->栈为空,匹配失败
(StackEmpty(&)st)//返回前要释放栈
{
StackDestroy
(&)st;return
; false}
else
=
{
STDataType tmp StackTop (&)st;StackPop
(&)st;if
(!=tmp '{' && * ==s '}'||
!= tmp '[' && * ==s ']'||
!= tmp '(' && * ==s ')')//不匹配
{
//返回前要释放栈
StackDestroy
(&)st;return
; false}
else
++
{
s;}
}
}
}
//如果比较完了之后,栈中还有元素,说明不匹配
=
bool tmp StackEmpty (&)st;//返回前要释放空间
StackDestroy
(&)st;return
; tmp}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)