“#include<”和#include之间的区别[关闭]
Posted
技术标签:
【中文标题】“#include<”和#include之间的区别[关闭]【英文标题】:Difference between "#include<" and #include" [closed] 【发布时间】:2020-01-14 16:17:47 【问题描述】:我目前正在关注初始化 winsock 结构的教程,但它使用“#include<”而不是通常的“#include”语句。我想知道有什么区别以及是否有必要进行区分。我有很多 Unix 系统的 C 和 C++ 编码经验,但对 Windows 开发相对较新。教程中的完整代码如下:
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib") //Winsock Library
int main(int argc , char *argv[])
WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
printf("Failed. Error Code : %d",WSAGetLastError());
return 1;
printf("Initialised.\n");
//Create a socket
if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET)
printf("Could not create socket : %d" , WSAGetLastError());
printf("Socket created.\n");
server.sin_addr.s_addr = inet_addr("74.125.235.20");
server.sin_family = AF_INET;
server.sin_port = htons( 80 );
//Connect to remote server
if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0)
puts("connect error");
return 1;
puts("Connected");
return 0;
```
UPDATE: This was apparently a result of an html typo in the original tutorial's website and should just be ```#include <stdio.h>```
【问题讨论】:
#include&lt;winsock2.h&gt;
不应使用 html 转义序列进行编译。你是在说#include <someheader.h>
和#include "someheader.h"
之间的区别吗,后者应该有很多重复。
在这段代码中,HTML 脱轨时还有很多其他的指示符。以printf(&quot;Initialised.\n&quot;);
为例。
我认为我们需要 OP 对此作出回应。
编辑假定 HTML 转义问题是 OP 的问题,而不是原始代码的问题。到目前为止,这两个答案都假设相反。我们真的需要知道它是什么。
@smac89 请不要在编辑中完全改变问题的含义,除非 OP 告诉您您的解释是正确的。
【参考方案1】:
这只是不小心出现的糟糕的 HTML 格式。
正确的语法是:
#include <winsock2.h>
而且由于在 HTML 中 &lt;
和 &gt;
符号经常被编码为 &lt;
和 &gt;
,编码意外地进入了您的示例代码,而不是正确的符号。
在代码的更下方,您将看到&quot;
和&amp;
,它实际上应该是"
和&
。
printf("Could not create socket : %d" , WSAGetLastError());
printf("Could not create socket : %d", WSAGetLastError());
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
稍微相关的琐事:
C 有Trigraphs,这使得这段代码完全合法:
??=include <stdio.h>
int main(void)
??<
char text??(??) = "Hello World";
printf(text);
return 0;
??>
【讨论】:
注: trigraphs 也在 C++ 中,直到 C++17 不要忘记二合字母,以防你想让你的代码看起来像<%
Classic ASP %>
!【参考方案2】:
应该是#include <winsock2.h>
。
问题是&lt;&gt;
替换了&lt;&gt;
并且没有被替换回来。
&lt;
是 <
的 HTML 转义,&gt;
是 >
的 HTML 转义。
为了防止XSS,它可能被多次替换。
例如作者想使用 HTML 转义,但 XSS 保护逃脱了转义,您的浏览器只取消了一次转义。
另一种可能是 XSS 保护用 HTML 转义替换了作者的提交,而另一个 XSS 保护在您尝试加载页面时再次替换了它。
正如您在代码中看到的,"
(&quot;
) 和 &amp;
(&amp;
) 也是如此。
也有可能是教程创建时没有XSS保护,作者正确转义了特殊字符。之后,添加了 XSS 保护。这种 XSS 保护逃脱了转义并导致您的结果。
【讨论】:
以上是关于“#include<”和#include之间的区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
QueryFullProcessImageName 未在此范围内声明