Die*_*ana 3 c c++ c-preprocessor
没有这个问题在帖子中没有回答和之间的区别是什么?#include <filename>#include “filename” 这是一个不同的问题.我正在研究C和C++之间的差异.我通过比较你可以对每种语言制作的最基本的程序来做到这一点:
在C:
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在C++中
#include <iostream>
int main()
{
std::cout << "Hello World!!!" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道标题和编译过程.但我想知道C和C++的#include指令之间是否有任何区别.例如,可能以不同的方式复制复制时的标题内容.我认为这个问题非常简单,您可以通过说"不"或"是,这是差异:1),2)"来回答.
例如,可能以不同的方式复制复制时的标题内容.
所述#include预处理指令是由CPP预处理器处理,即(大部分)相同为C和C++编译.分散的C和C++标准可能会引入细微差别,但这些都不会影响如何#include处理关于如何将文件内容替换为翻译单元的指令(除了如何扩展和匹配头文件名,请参阅@TC的答案).
CPP只是文本替换,只是将从包含文件中看到的内容扩展到翻译单元,无论是C还是C++代码.
我认为这个问题非常简单,您可以通过说"不"或"是,这是差异:1),2)"来回答.
不,该#include指令在文本替换方面没有差异.
好吧,从结果来看,C编译器可能无法正确编译从C++头文件扩展的代码,有时反之亦然.
是的,至少有两个不同之处.在C++中(WG21 N4567 [cpp.include]/5):
实现应为由一个或多个非数字或数字 s(2.10)组成的序列提供唯一映射,后跟一个句点(
.)和一个非数字.第一个字符不应是数字.实现可能会忽略字母大小写的区别.
在C(WG14 N1570 6.10.2/5,强调我的):
实现应为由一个或多个非数字或数字(6.4.2.1)组成的序列提供唯一映射,后跟一个句点(
.)和一个非数字.第一个字符不应是数字.实现可以忽略字母大小写的区别,并在该句点之前将映射限制为八个重要字符.
符合要求的C实现可以将" foobarbaz.h"和" foobarbat.h" 映射到同一源文件.符合C++的实现不能.
另外,在C(N1570 6.4.7)中:
如果字符
',\,",//,或/*发生之间的序列中<和>分隔符,该行为是未定义.类似地,如果字符',\,//,或/*发生之间的序列中"的分隔符,该行为是未定义.
而在C++中(N4567 [lex.header]/2):
的任一字符的外形
'或\或的任一字符序列/*或//在Q-炭序列或 H-炭序列是有条件地支持与实现定义的语义,由于是角色的出现"在ħ -char-序列.
"有条件地支持实现定义的语义"意味着
而"未定义的行为"意味着实现可以做任何想做的事情.
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |