标签: trigraphs

三字母是否仍然有效C++?

我们都知道的历史好奇心二合字母和三合,但随着近年来C++的所有更改我很好奇:他们是合法的C++ 14?C++ 17怎么样?

c++ digraphs trigraphs c++14 c++17

8
推荐指数
1
解决办法
990
查看次数

C/C++字符串文字中的未知元字符?

我创建了一个包含以下代码段的新项目:

char* strange = "(Strange??)";
cout << strange << endl;
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

(奇怪]

因此翻译'??)' - >']'

调试它显示我的char*字符串文字实际上是该值,它不是流转换.这显然不是我见过的元字符序列.某种Unicode或宽字符序列也许?我不这么认为......我试过禁用所有相关的项目设置无济于事.

有人有解释吗?

  • 搜索:'问号,问号,闭括号'c c ++ string literal

c c++ trigraphs visual-c++

6
推荐指数
3
解决办法
2028
查看次数

为什么GCC在使用三字符时会发出警告,但在使用有向图时则不会?

码:

#include <stdio.h>

int main(void)
{
  ??< puts("Hello Folks!"); ??>
}
Run Code Online (Sandbox Code Playgroud)

上述程序,当使用GCC 4.8.1编译-Wall-std=c11,给出了以下警告:

source_file.c: In function ‘main’:
source_file.c:8:5: warning: trigraph ??< converted to { [-Wtrigraphs]
     ??< puts("Hello Folks!"); ??>
 ^
source_file.c:8:30: warning: trigraph ??> converted to } [-Wtrigraphs]
Run Code Online (Sandbox Code Playgroud)

但当我改变身体时main:

<% puts("Hello Folks!"); %>
Run Code Online (Sandbox Code Playgroud)

没有警告被抛出.

那么,为什么编译器在使用三字符时会发出警告,但在使用有向图时却没有?

c gcc compiler-warnings digraphs trigraphs

6
推荐指数
2
解决办法
1368
查看次数

打印?和!! 以不同的顺序将显示不同的输出

当我以非常简单的方式编写以下行时,我发现了一个奇怪的输出:

码:

 printf("LOL??!\n");
 printf("LOL!!?\n");
Run Code Online (Sandbox Code Playgroud)

输出: 替代文字

即使代码是在MBCS和UNICODE下编译的,也会发生这种情况.

输出因"?"的顺序而异.和"!"......

任何的想法?

c trigraphs

5
推荐指数
3
解决办法
392
查看次数

这些奇怪的问号是什么意思?

我遇到了一些奇怪的代码.它甚至看起来都不像C,但令我惊讶的是它编译并在我的C编译器上运行.这是C语言的一些非标准扩展吗?如果是这样,它的原因是什么?

??=include <stdio.h>

int main()
??<
  const char arr[] = 
  ??<
    0xF0 ??! 0x0F,
    ??-0x00,
    0xAA ??' 0x55
  ??>;

  for(int i=0; i<sizeof(arr)/sizeof(*arr); i++)
  ??<
    printf("%X??/n", (unsigned char)arr??(i??));
  ??>

  return 0;
??>
Run Code Online (Sandbox Code Playgroud)

输出:

FF
FF
FF
Run Code Online (Sandbox Code Playgroud)

c trigraphs

5
推荐指数
1
解决办法
542
查看次数

在 c 中使用 '??='、'??&lt;' 和 '??&gt;'

我正在经历一些面试问题,我遇到了如下示例。我尝试了简单输入/输出以及一些逻辑的示例,它工作没有任何问题。

??=include <stdio.h>

int main(void) 
??<
    printf("Hello");
    // Other code lines here
    return 0;
??>
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这没有任何编译问题,并且输出符合要求。

这里的“??=”、“??<”和“??>”有何意义?

c trigraphs

5
推荐指数
1
解决办法
578
查看次数

包含不可表示字符的三字符的字符文字的含义

在使用ASCII作为其字符集的C编译器上,字符文字的值'??<'将等于'{',即0x7B.什么将是字面的一个编译器,其字符集不值一个{角色?

在字符串文字之外,编译器可以推断出??<应该具有与定义的开括号字符相同的含义,即使编译器字符集没有开括号字符.实际上,三字母的整个目的是允许使用可表示字符的序列来代替不可表示的字符.该规范要求三字符甚至在字符串文字中处理,然而,这令我感到困惑.如果编译器的字符集包含一个{字符,编译器可以允许'{'表示为'??<',但字符集包括{我看不出程序员不会简单地使用它.{但是,如果字符集不包含,这似乎是首先使用三字符串的唯一原因,编译器应该??<用什么可表示的字符代替?

c trigraphs language-lawyer

4
推荐指数
1
解决办法
193
查看次数

三合字母

c99 standard  5.2.1.1 Trigraph sequences
Run Code Online (Sandbox Code Playgroud)

2 示例以下源代码行

printf("Eh???/n");
Run Code Online (Sandbox Code Playgroud)

变成(在替换三字母序列之后??/)

printf("Eh?\n");
Run Code Online (Sandbox Code Playgroud)

据说它将替换三合字母序列,但事实并非如此。

正在打印 "Eh???/n"

我错过了什么吗?

c trigraphs

2
推荐指数
1
解决办法
1120
查看次数

我怎么能跳过那些警告?C++

已添加代码:

bool CHARACTER::SpamAllowBuf(const char *Message)
{
    if (!strcmp(Message, "(??´c)") || !strcmp(Message, "(?·)") || !strcmp(Message, "(±a?Y)") || !strcmp(Message, "(AA??)") || !strcmp(Message, "(?c¶?)") || !strcmp(Message, "(???e)") || !strcmp(Message, "(??C?)") || !strcmp(Message, "(????)") || !strcmp(Message, "(AE??)"))
    {
        return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

警告给出:

char.cpp:7254:121: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7254:245: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7254:275: warning: trigraph ??) ignored, use -trigraphs to enable
Run Code Online (Sandbox Code Playgroud)

我怎么能跳过这个警告?

c++ trigraphs

2
推荐指数
1
解决办法
90
查看次数

为什么在Gnu gcc/g ++中为三字符序列解析字符串文字?

考虑一下这个无害的C++程序:

#include <iostream>
int main() {
  std::cout << "(Is this a trigraph??)" << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我使用g ++版本5.4.0编译它时,我得到以下诊断:

me@my-laptop:~/code/C++$ g++ -c test_trigraph.cpp
test_trigraph.cpp:4:36: warning: trigraph ??) ignored, use -trigraphs to enable [-Wtrigraphs]
   std::cout << "(Is this a trigraph??)" << std::endl;
                                     ^
Run Code Online (Sandbox Code Playgroud)

程序运行,其输出符合预期:

(Is this a trigraph??)
Run Code Online (Sandbox Code Playgroud)

为什么要为三字符分析字符串文字呢?

其他编译器也这样做吗?

c++ gcc trigraphs

1
推荐指数
1
解决办法
177
查看次数