精华内容
下载资源
问答
  • Python调用C++代码

    千次阅读 2018-09-07 06:13:23
    Python调用C++代码 今天在研究PyTorch中Tensor的一些操作的时候,发现其底层Tensor的操作都是用C++写的,并使用pybind11进行C++和Python的桥接。所以,我就想着探索一下Python中如何调用C++代码? 可行方案 ...

    Python调用C++代码

    今天在研究PyTorch中Tensor的一些操作的时候,发现其底层Tensor的操作都是用C++写的,并使用pybind11进行C++和Python的桥接。所以,我就想着探索一下Python中如何调用C++代码?

    可行方案

    其实,方案还是挺多的:

    • Python内置的ctypes接口(可以将C/C++代码编译为动态库,在Python中进行调用)
    • CFFI(提供了一种在Python代码中混合C代码的途径)
    • Cython (C后端版本的Python实现,建立了Python类型和C语言之间的映射关系,提供了使用Python代码调用C函数库的能力)
    • Boost.Python (提供手动导出C++代码接口的能力供Python调用)
    • SWIG(不止支持C/C++到Python的桥接,SWIG支持很多语言跟C/C++的桥接,是广泛使用的一种解决方案)

    Hello Word示例

    感觉ctypes简单很多,对于小型程序感觉还是挺友好的,所以该篇博客介绍一下使用ctypes调用C/C++的步骤。

    编写C或者C++代码

    头文件(test.h)

    int sum(int, int);

    C++代码(test.cpp)

    // Windows需要__declspec(dllexport)申明
    // extern "C"指示以C语言规范进行编译
    #define DLLEXPORT extern "C"
    DLLEXPORT int sum(int a, int b) {
        return a + b;
    }

    或者C代码(test.c)

    // 同样的Windows在函数前面需要__declspec(dllexport)申明
    int sum(int a, int b) {
        return a + b;
    }

    C代码编译成动态链接库

    我使用的是macOS,选择使用gcc进行编译gcc -Wall -Wextra -O -ansi -pedantic -shared test.c -o test.so

    在Python中调用

    In [1]: from ctypes import cdll
    
    In [2]: mydll = cdll.LoadLibrary('test.so')
    
    In [3]: mydll.sum
    Out[3]: <_FuncPtr object at 0x10f4cf688>
    
    In [4]: mydll.sum(5, 2)
    Out[4]: 7
    展开全文
  • 在本章中,将介绍C++代码整洁的一些基础知识,这些通常是通用的知识,但是有些却是编程语言所特有的。例如,在所有编程语言中,起一个好名字是必不可少的。其他几个方面,如const的正确使用,智能指针的使用,或Move...

    在本章中,将介绍C++代码整洁的一些基础知识,这些通常是通用的知识,但是有些却是编程语言所特有的。例如,在所有编程语言中,起一个好名字是必不可少的。其他几个方面,如const的正确使用,智能指针的使用,或Move语义的巨大优势,都是C++特有的。
    Note:如果你还没有这样做,请立即daim开始使用C++11(或更高版本)!
    随着2011年新标准的出现,C++在许多方面得到了改进。C++11的一些特性,以及随后的C++14和C++17的特性都太有用了,不容忽视,而且这些特性不仅只与性能有关。有了这些新特性,C++语言肯定会变得更容易使用,甚至变得更加强大。C++11不仅可以使你的代码更简短、更清晰、更易于阅读,它还可以提高你的工作效率。此外,改语言标准及后续标准的特性,使你能编写更加正确且安全的代码。

    良好的命名

    程序,是为了供人阅读而编写的,只是顺便提供给机器执行。
    – Hal Abelson and Gerald Jay Sussman,1984
    如果给变量、函数或类想出合适的名称似乎很难或几乎不可能,那么这可能表明你的代码在某些方面存在问题。也许存在设计问题,你应该找到并解决命名困难的根本原因。
    以下是一些想出好名字的建议

    1.名称应该自解释

    我已经时刻保持代码自注释的这种观念。所谓代码自注释,就是不需要注释解释其用途的代码。
    一些不好的命名的例子

    unsigned int num;
    bool flag;
    std::vector<Customer> list;
    Product data;
    

    一些好的命名的例子

    unsigned int numberOfArticles;
    bool isChanged;
    std::vector<Customer> customers;
    Product orderdProduct;
    

    2.使用域中的名称

    这种做法的优点是显而易见的。首先,使用域中的术语,可以促进开发人员与其他利益相关人之间的沟通和交流

    3.选择适当抽象层次的名称

    为了控制当今软件系统的复杂性,这些系统通常是分层的。软件系统的分层意味着将整个问题分解为较小的部分作为子任务,直到开发人员确信他们能够处理这些较小的部分。进行这种分解有不同的方法和标准。

    4.避免冗余的名称

    如果你将一个类型的名称作为创建它的成员变量的一部分,那么给这个类提供一个能清晰表述上下文信息的命名是多余的,
    不要在其成员变量中重复该类的名称

    #include <string>
    class Movie{
    private:
     std::string movieTitle;
    };
    

    不要在成员名称中包含成员自己的类型

    #include <string>
    class Movie{
    //...
    private:
       std::string stringTitle;
    

    5.避免晦涩难懂的缩写

    6.避免匈牙利命名和命名前缀

    展开全文
  • protoc 生成C++代码

    千次阅读 2017-10-11 11:16:20
    protoc 生成c++代码

    1.安装protoc
    2.把protoc.exe增加到环境变量path,这样方便运行protoc
    这里写图片描述
    3.书写proto文件。eg:test.proto

    syntax = "proto2";
    message Book
    {
        optional string name = 1;
        optional int32 pages = 2;
        optional float price = 3;
    }
    message Student
    {
        optional int32 age = 1;
        optional string name = 2;
        optional float score = 3;
        repeated Book arrBook = 4;
    }

    4.生成C++代码
    protoc -I=Proto文件路径 –cpp_out=指定输出.h和.cc的目录 Proto文件
    也可以使用protoc -h 查看更多帮助
    这里写图片描述

    生成结果:
    这里写图片描述

    此时可以直接拷贝到工程里面使用了。

    展开全文
  • C调用C++代码

    千次阅读 2018-11-06 14:07:46
    可以将封装后的C++代码编译成库文件,供C语言调用; 需要注意的是,封装的C++代码库文件是用g++编译的,所以在C中调用时,需要添加extern "C"{}关键字。 编译c代码时,要加上-lstdc++ 如下代码,是c...

    有时C程序里需要用到C++的类,但是C语言又不能直接调用类,这时需要把C++的类使用C接口封装后,再调用,

    可以将封装后的C++代码编译成库文件,供C语言调用;

    需要注意的是,封装的C++代码库文件是用g++编译的,所以在C中调用时,需要添加extern "C"{}关键字。

    编译c代码时,要加上-lstdc++

     

    如下代码,是c代码使用C++的map容器的例子:

    //test.cpp 封装C++代码
    
    
    #include <map>
    #include <iostream>
    #include "test.h"
    
    using namespace std;
    
    static map<int, int> m_testMap;
    
    
    void pushVal(int key, int val)
    {
    	m_testMap[key] = val;
    }
    
    
    int getVal(int key)
    {
    	map<int, int>::iterator iter = m_testMap.find(key);
    	if (iter != m_testMap.end() )
    	{
    		return iter->second;
    	}
    
    	return  -1;
    }
    
    //头文件 test.h
    
    #ifndef _TEST_H_
    #define _TEST_H_
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    void pushVal(int key, int val);
    int getVal(int key );
    
    
    #ifdef __cplusplus
    }
    #endif
    
    
    #endif
    

    main函数,调用封装的C++接口:

    //main.c
    
    #include <stdio.h>
    #include "test.h"
    
    
    
    int main()
    {
    	printf("test\n");
    	for (int i = 0; i < 10; i++)
    	{
    		printf("push key: %d, val: %d\n", i, i*10);
    		pushVal(i, i*10);
    	}
    	
    	int val = 0;
    	for (int i = 0; i < 10; i++)
    	{
    		val = getVal(i);
    		printf("get key: %d, val: %d\n", i,val);
    	}
    	return 0;
    }
    

    编译的时候,为了简单,我这里没有编译成库文件,直接用引用.o编译的:

    makefile:

    all: 
    	g++ -Wall -c  test.cpp -o test.o
    	gcc -Wall -c  main.c -o main.o
    
    	gcc -Wall test.o main.o -o test -lstdc++
    
    clean:
    	rm test *.o
    

    编译运行结果如下:

    make
    g++ -Wall -c  test.cpp -o test.o
    gcc -Wall -c  main.c -o main.o
    gcc -Wall test.o main.o -o test -lstdc++
    
    运行:
    ./test
    test
    push key: 0, val: 0
    push key: 1, val: 10
    push key: 2, val: 20
    push key: 3, val: 30
    push key: 4, val: 40
    push key: 5, val: 50
    push key: 6, val: 60
    push key: 7, val: 70
    push key: 8, val: 80
    push key: 9, val: 90
    get key: 0, val: 0
    get key: 1, val: 10
    get key: 2, val: 20
    get key: 3, val: 30
    get key: 4, val: 40
    get key: 5, val: 50
    get key: 6, val: 60
    get key: 7, val: 70
    get key: 8, val: 80
    get key: 9, val: 90

    个人微信服务号同步推送文章(微信公众号:fensnote):

     

    展开全文
  • MAC上如何运行C++代码

    万次阅读 2018-08-08 00:27:11
    C++当前比较流行的开发工具位dev c++,但是在MAC上没有dev c++的安装软件,因此我们需要使用Xcode来进行运行C++代码,具体的执行如下: 当我们写好代码之后,我们只需要点击左上角的运行按钮,则程序就输出运行...
  • 使用g++编译C++ 11标准的C++代码

    千次阅读 2016-04-17 10:15:30
    使用g++编译C++ 11标准的C++代码1. 升级g++版本 仅g++ 4.8及以上版本才支持C++ 11标准。 查看g++版本: $ g++ --version2. 打开g++的C++ 11标准支持 g++ 4.8默认不支持C++ 11标准,使用参数 -std=c++11来开启C++ ...
  • C++代码静态检测

    千次阅读 2019-01-18 23:42:49
    C++代码静态检测一,CppCheck(下载地址:http://cppcheck.net/)1,使用CppCheck客户端检测2,在vs中使用CppCheck二,TscanCode(下载地址:https://github.com/Tencent/TscanCode)三,PVS-studio(下载地址:...
  • 使用NDK编译C++代码

    千次阅读 2018-12-24 21:28:52
    这里写自定义目录标题一、使用NDK编译C++代码1.1概述1.2 NDK下载与环境配置1.3 NDK代码编译1.3.1 编译目录建立1.3.2 mk文件配置1.3.2 NDK编译1.4 总结 一、使用NDK编译C++代码 1.1概述 最近需要把PC端实现的算法移植...
  • matlab编写好了,但是对应的C语言代码不知如何去写。比如编写好了神经网络代码...MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码。 MATLAB可以转化为C/C++,C/C++也可以转化为MATLAB语言(...
  • 在 Go 语言中调用 C++ 代码

    千次阅读 2018-10-29 11:22:21
    在 Go 语言中调用 C++ 代码  go cgo c c++ cpp 写于2017-12-26 上篇博客讲到Go 如何调用 C, 这篇主要讲 Go 如何调用 C++C++代码目前没法内联在 Go 代码里,只能通过外部库方式引用,同时 cgo 也没办法...
  • SonarQube+cppcheck实现C++代码扫描

    千次阅读 热门讨论 2019-09-11 14:53:42
    最近接收到C++代码检测的需求,一开始上网找了很久,sonar的检测都是扫描java、web等,很少有C++的,现将自己调研结果记录于此。 工具准备 SonarQube工具:展示扫描报告,版本6.7以上 sonar_scanner工具:代码...
  • 使用Source Insight阅读C++代码

    万次阅读 2016-11-02 10:34:54
    使用Source Insight阅读C++代码
  • 如何用c++代码,并用zip算法压缩和解压缩文件夹,该文件是代码动态生成的
  • C/C++ 代码检测工具

    千次阅读 2018-07-13 13:33:38
    valgrind:https://www.cnblogs.com/AndyStudy/p/6409287.html C/C++静态代码检查工具对比分析:...C++代码质量扫描主流工具深度比较:https://blog.csdn.net/wetest_tencent/article...
  • Unity调用C/C++代码方法

    千次阅读 2019-09-28 13:52:46
    一般C/C++的代码通过VisualStudio生成.Dll文件,然后在unity中通过C#的代码调用即可。...二,在源文件中创建c/c++代码 然后我们需要在我们创建的DllForUnity.cpp中添加代码: #include "stdafx.h" ...
  • C++代码中执行bat文件

    千次阅读 2019-01-09 13:10:13
    C++代码中执行bat文件 在C++代码中执行磁盘上的一个bat文件,这个bat文件的完整路径是:E:\\7z\\my7z.bat。 方法1 system("E:\\7z\\my7z.bat"); system是C标准库中的函数。 方法2 WinExec("E:\...
  • C++代码整洁之道:C++17可持续软件开发模式实践》 掌握高效的现代C++编程法则;学会应用C++设计模式和习惯用法;利用测试驱动开发来创建可维护、可扩展的软件。 编辑推荐: 如果想用C++语言编写出易...
  • 在我们的开发中,跨平台的需求越来越强烈,如何保持C/C++代码能在多个平台上编译,是一个比较值得研究的问题。关于跨平台的文章网上很多,跨平台的库网上也很多。那么我从自己的跨平台开发经验谈一谈自己的心得,...
  • 如何在C或C++代码中嵌入ARM汇编代码

    千次阅读 2015-01-20 17:40:07
    大家知道,用C或者C++等高级语言编写的程序,会被编译器编译成最终的机器指令。这中间,编译器会对代码自动进行优化。但是,这种优化往往不一定非常高效。...GCC编译器支持直接在C或者C++代码中,嵌入ARM汇
  • MATLAB Coder 可以将 MATLAB 代码生成独立的、可读性强、可...检查MATLAB代码的兼容性(有些matlab代码语句并不能生成c/c++代码);产生最终使用的源代码或 MEX。 一个简单的例子,两数相乘: 1、安装 matlab2011a 或者
  • 两个在线编写C++代码的网站

    千次阅读 2019-02-10 16:50:59
    两个在线编写C++代码的网站
  • android studio调试c++代码

    万次阅读 2016-11-02 15:27:27
    android studio调试c/c++代码 一、Debug调试效果 DEBUG.png 二、配置JNI调试环境 2.1 配置build.gradle build.png 只需配置android标签节点下的buildTypes buildTypes{ debug...
  • Linux下C/C++代码调用PHP代码

    千次阅读 2014-12-05 11:19:20
    Linux下C/C++代码可以通过popen系统函数调用PHP代码并通过fgets函数获取PHP代码echo输出的字符串。
  • 利用LaTeX展现C++代码

    千次阅读 2017-03-25 15:32:15
    最近由于需要在LaTeX中展现C++代码,于是就在网络上搜索别人提供的解决方案。结果大失所望,所搜索出来的LaTeX代码要么不能运行,要么运行结果不符合自己的需要。国内的利用百度进行搜索,国外的利用yahoo进行搜索。...
  • C/C++代码实现向量叉乘

    千次阅读 2020-03-06 16:26:35
    c++代码: #include<iostream> using namespace std; int main() { int a, b, x1, x2, y1, y2, z1, z2, h, m, n; cout << "请输入向量a:"; cin >> x1 >> y1 >...
  • C++代码重构——从C global到C++ template

    千次阅读 2014-04-18 21:57:49
    如何实现代码的从算法正确到优秀的...这或许是在写C++代码时经常需要考虑的。本文以有界队列为例,描述了一种C++代码从C算法到C++模板的重构方法。这种方法简单可行,实现了逻辑(算法)设计与接口设计两个步骤的分离。
  • VSCode远程开发调试服务器c/c++代码

    千次阅读 2020-03-02 14:28:29
    语音相关的好多项目要在linux上跑,但代码开发大多是在PC机上,本篇简单介绍一下怎么在个人电脑上用VSCode远程开发调试服务器上的c/c++代码。 思路与上篇(PyCharm远程调试服务器python代码 )是一致的,所以端口...
  • devC++代码格式化对齐的快捷键

    万次阅读 2019-03-21 22:07:00
    devC++代码格式化对齐的快捷键是ctrl + shift + a ctrl + 左右键可以使光标移动一个单词的距离 shirt + 左右键可以选中光标左右的一个字符 转载于:https://www.cnblogs.com/hi3254014978/p/10575045.html...
  • Google 的 C++ 代码规范

    万次阅读 多人点赞 2017-12-29 13:15:30
     总的来说,这套代码规范还是相当不错的,既有防止错误使用C++的某些特性而导致bugs的规范,又有代码书写的相关规范使其便于阅读,建议搞C++的童鞋都看一看。当然,具体的团队应该会有具体的代码规范,代码风格方面...
  • Android Studio 添加 C、C++ 代码

    千次阅读 2018-03-01 15:02:50
    Android Studio 添加C、C++代码 原文 Android Studio 用于构建原生库的默认工具是CMake。但由于很多现有项目都使用构建工具包编译其原生代码,Android Studio 还支持 ndk-build。 Google 推荐创建新的原生库都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 215,482
精华内容 86,192
关键字:

c++代码

c++ 订阅