Error[8]: Undefined offset: 163, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录

extern “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}
[+++]

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
【C++】extern C - C和C++程序如何相互调用_C_内存溢出

【C++】extern C - C和C++程序如何相互调用

【C++】extern C - C和C++程序如何相互调用,第1张

文章目录
  • extern "C"
      • 使用场景
    • C++调用C的静态库:
      • VS2019创建静态库步骤
      • 测试文件配置静态库
    • C程序调用C++的库
    • 总结:
      • 测试代码:有效的括号

extern “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}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/2991544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存