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);
}
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);
}
相关文章推荐
- C++【基础常识】
- C++ 基础常识(一)
- C、C++、Java的基础常识介绍
- C++基础常识快速掌握--自学笔记(一)
- C++基础-链表的建立、插入和删除
- C++ 基础知识二
- Visual C++.NET GDI+编程基础
- [C++基础]位运算 游戏开发中的应用
- C++基础01
- 从Android/Java基础之上学习C/C++语言(3)--C语言基础--内存分配
- Java基础常识(适用于面试)
- 程序开发基础学习二(C++ Google Style 命名规则)
- C++最基础的类库计划
- 目录.C/C++基础
- C++基础入门教程(五):new和delete
- 从Android/Java基础之上学习C/C++语言(7)--C语言基础--IO
- C++基础---变量
- C++基础之用栈计算逆波兰式
- C++基础---空类型
- C++复习:一个小例子复习基础