我今天学到了C99和C++中的有向图.以下是有效的计划:
%:include <stdio.h>
%:ifndef BUFSIZE
%:define BUFSIZE 512
%:endif
void copy(char d<::>, const char s<::>, int len)
<%
while (len-- >= 0)
<%
d<:len:> = s<:len:>;
%>
%>
Run Code Online (Sandbox Code Playgroud)
我的问题是:它们为什么存在?
考虑这个(可怕的,可怕的,没有好的,非常糟糕的)代码结构:
#define foo(x) // commented out debugging code
// Misformatted to not obscure the point
if (a)
foo(a);
bar(a);
Run Code Online (Sandbox Code Playgroud)
我已经看到两个编译器的预处理器在这段代码上生成不同的结果:
if (a)
bar(a);
Run Code Online (Sandbox Code Playgroud)
和
if (a)
;
bar(a);
Run Code Online (Sandbox Code Playgroud)
显然,对于可移植的代码库来说这是一件坏事.
我的问题:预处理器应该用这个做什么?首先是Elide评论,还是先扩展宏?
我正在查看c ++中字符串中字符的转义序列,我注意到有一个问号的转义序列.谁能告诉我为什么会这样?这看起来有点奇怪,我无法弄清楚是什么?做一个字符串.谢谢.
我收到错误<:无法在g ++编译器上开始模板参数列表.码
template<typename T> class SomeClass;
class Class;
SomeClass<::Class>* cls;
Run Code Online (Sandbox Code Playgroud) 我的编译器(gcc)给了我这个警告.请帮我理解它的含义:
警告:trigraph ??/ignored,使用-trigraphs启用

即使在GCC编译器中,如果没有明确指定trigraph属性,也不会编译三字符.
#include<stdio.h>
int main()
{
int a=4;
if((a==4) ??! (a==5))
printf("\nHello world!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
保存为try.c的程序仅在我们指定时才在GCC编译器中编译gcc -Wall -trigraphs try.c,并且仍然显示警告.你可以招募一些能够处理和处理三字符而没有任何错误或警告的编译器吗?
我创建了一个包含以下代码段的新项目:
char* strange = "(Strange??)";
cout << strange << endl;
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
(奇怪]
因此翻译'??)' - >']'
调试它显示我的char*字符串文字实际上是该值,它不是流转换.这显然不是我见过的元字符序列.某种Unicode或宽字符序列也许?我不这么认为......我试过禁用所有相关的项目设置无济于事.
有人有解释吗?
我正在经历一些面试问题,我遇到了如下示例。我尝试了简单输入/输出以及一些逻辑的示例,它工作没有任何问题。
??=include <stdio.h>
int main(void)
??<
printf("Hello");
// Other code lines here
return 0;
??>
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这没有任何编译问题,并且输出符合要求。
这里的“??=”、“??<”和“??>”有何意义?
应该输出以下代码6,而是输出5.我无法弄清楚为什么.这是怎么回事?
#include <iostream>
template <typename T>
void foo(T& y)
{
y++;
}
int main()
{
int x = 5;
// Why won't this line work???/
foo(x);
std::cout << x;
}
Run Code Online (Sandbox Code Playgroud)