预编译#if + macro 应该如何理解?
在winsock2.h中看到如下代码
#if INCL_WINSOCK_API_PROTOTYPES
WINSOCK_API_LINKAGE
int
WSAAPI
WSAStartup(......);
#endif
请问开始的预编译#if 后面跟上那几个宏是什么意思?放在函数声明的前面该如何理解?
[解决办法]
这里视作
if(INCL_WINSOCK_API_PROTOTYPES){}
差别在于,这里如果是真则变异中间的代码,否则不变异,这是C的相关知识,可以在很多地方找到,看看这里http://zhidao.baidu.com/question/5225080.html
INCL_WINSOCK_API_PROTOTYPES 应该是一个定义为一个值的宏,可以当初if判断的表达式
[解决办法]
#define _FLAG 0 //#define _FLAG 1#if _FLAGvoid fun() { cout<<"aaaa"<<endl; }#elsevoid fun() { cout<<"cccc"<<endl; }#endif
[解决办法]
我也来解释解释
#if INCL_WINSOCK_API_PROTOTYPES //#if 后面跟常量 意思就是判断真假了WINSOCK_API_LINKAGE //这个是跟你后面函数有关的,跟if没关,是指定你后面函数的链接方式int //下面是函数声明不说了WSAAPI WSAStartup(......); #endif
[解决办法]
WSAAPI 这种宏一般是相当于WINAPI之类的宏,用来指定调用方式的,比如堆栈如何安排之类的,忽略就好了,:-)
顶一下7楼对WINSOCK_API_LINKAGE的解释