华为云计算 云知识 连接规范

连接规范

在开发程序库的时候,明确连接规范是必须遵守的一条规则。通用的连接规范则属C连接规范:extern "C",使用方法如下

1.如果是仅对一个类型,函数,变量或常量等指定连接规范:


  
  1. extern "C" WinMainCRTStartup();  
  2. extern "C" const CLSID CLSID_DataConverter;  
  3. extern "C" struct Student{...};  
  4. extern "C" Student g_Student; 

2.如果是对一段代码限定连接规范:


  
  1. #ifdef _cplusplus 
  2. extern "C" 
  3. #endif 
  4. const int MAX_AGE = 200; 
  5. #pargma pack(push, 4); 
  6. typedef struct _Person 
  7.   char *m_Name; 
  8.   int m_Age; 
  9. }Person, *PersonPtr; 
  10. #pargma pack(pop) 
  11. Person g_Me; 
  12. int   __cdecl memcmp(const void*, const void*, size_t); 
  13. void* __cdecl memcpy(void*, const void*, size_t); 
  14. void* __cdecl memset(void*, intsize_t); 
  15. #ifdef  _cplusplus 
  16. #endif 

3.如果当前使用的是C++编译器,并且使用了extern "C"来限定一段代码的连接规范,但是又想令其中某行或某段代码保持C++的连接规范,则可以编写如下代码:


  
  1. #ifdef __cplusplus 
  2. extern "C"
  3. #endif 
  4. const int MAX_AGE = 200; 
  5. #pargma pack(push, 4); 
  6. typedef struct _Person 
  7.   char *m_Name; 
  8.   int m_Age; 
  9. }Person, *PersonPtr; 
  10. #pargma pack(pop) 
  11. Person g_Me; 
  12.  
  13. #if _SUPPORT_EXTERN_CPP_ 
  14. extern "C++"
  15. #endif 
  16. int   _cdecl memcmp(const void*, const void*, size_t); 
  17. void* _cdecl memcpy(void*, const void*, size_t); 
  18. #if _SUPPORT_EXTERN_CPP_ 
  19. #endif 
  20. void* _cdecl memset(void*, intsize_t); 
  21. #ifdenf __cplusplus 
  22. #endif 

4.如果在某个声明中指定了某个标识符的连接规范为 extern "C",那么也要为其对应的定义指定extern "C"连接规范


  
  1. #ifdef  __cplusplus 
  2. extern "C"
  3. #endif 
  4. int __cdecl memcmp(const void*, const void*, size_t); 
  5. #ifdef  __cplusplus 
  6. #endif 
  7. #ifdef  __cplusplus 
  8. extern "C"
  9. #endif 
  10. int __cdecl memcmp(const void*, const void*, size_t); 
  11.   ...//功能实现 
  12. #ifdef  __cplusplus 
  13. #endif 

 

转载于:https://blog.51cto.com/zcwtop/796793

上一篇:IE下闭包引起跨页面内存泄露探讨(引)

下一篇:给服务器加内存

51CTO

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。
相关推荐