您的位置:首页 > 编程语言 > C语言/C++

C++基础常识

2012-08-10 10:39 232 查看
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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息