C++基础常识

来源:互联网 发布:不干胶标签设计软件 编辑:程序博客网 时间:2024/06/03 20:07

int f(int x);     /* 声明一个函数 */                普通函数

int (*f) (int x);     /* 声明一个函数指针 */         指向一个函数的指针

int* f(int x);     /* 声明一个指针函数 */            返回值是指针的函数


int* array[ ]    /*指针数组*/                元素是指针的数组

int (*array)[ ]    /*数组指针*/             指向一个数组的指针


#ifdef __cplusplus
extern "C" {
#endif

//一段代码

#ifdef __cplusplus
}

#endif

C和C++对函数的处理方式是不同的.extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。


#ifndef xxxxx

#define xxxxx

//头文件内容

#endif

用宏做头文件保护,防止重复引用



函数回调在C语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调。必须有函数指针



/**
 * 广播信息
 */
void broadCast(char* outputBuffer, size_t size)

{

    //建立套接字
    //第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;
    //第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW
    //第三个参数指定应用程序所使用的通信协议。
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    //建立地址对象,并填充

    struct sockaddr_in servaddr;
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;     //sa_family是地址家族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET;代表TCP/IP协议族
    servaddr.sin_port = htons(Config::udp_port);   //存储端口号
    //绑定目的广播IP地址
    inet_pton(AF_INET, "192.168.1.255", &servaddr.sin_addr);
    //设置启动广播通信
    const int on = 1;
    setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
    //发送消息
    sendto(sockfd, outputBuffer, size, 0, (struct sockaddr*) &servaddr,
            sizeof(servaddr));
    std::cout<<outputBuffer<<std::endl;
    //关闭套接字
    close(sockfd);
}


/**
 * 单播信息
 */
void uniCast(char* outputBuffer, size_t size, const std::string& to_ip)
{
    //建立套接字
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    //建立地址对象,并填充
    struct sockaddr_in servaddr;
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(Config::udp_port);
    //绑定目的IP地址
    inet_pton(AF_INET, to_ip.c_str(), &servaddr.sin_addr);
    //发送消息
    sendto(sockfd, outputBuffer, size, 0, (struct sockaddr*) &servaddr,
            sizeof(servaddr));
    close(sockfd);
}