我对这段代码感到好奇:
cout << 'test'; // Note the single quotes.
Run Code Online (Sandbox Code Playgroud)
给我一个输出1952805748.
我的问题:输出是内存中的地址还是什么?
我不知道C和C++允许multicharacter literal:不是'c'(C中的int类型和C++中的char),但'tralivali'(类型为int!)
enum
{
ActionLeft = 'left',
ActionRight = 'right',
ActionForward = 'forward',
ActionBackward = 'backward'
};
Run Code Online (Sandbox Code Playgroud)
标准说:
C99 6.4.4.4p10:"包含多个字符(例如,'ab')的整数字符常量的值,或包含未映射到单字节执行字符的字符或转义序列的值是实现定义的".
我发现它们广泛用于C4发动机.但是,当我们谈论平台独立序列化时,我认为它们并不安全.Thay也会让人感到困惑,因为看起来像字符串.那么什么是多字符文字的使用范围,它们对某些东西有用吗?他们是否只是为了与C代码兼容而使用C++?它们被认为是goto运算符的坏特征吗?
为什么编译:
char ch = '1234'; //no error
Run Code Online (Sandbox Code Playgroud)
但不超过4 char秒:
char ch = '12345'; //error: Too many chars in constant
Run Code Online (Sandbox Code Playgroud)
(是的,我知道' '用于一个char," "用于字符串;我只是在尝试)
这是否与char使用ASCII数字表示的事实有关?
我正在使用Apple的ScriptingBridge框架,并为iTunes生成了一个包含以下几个enum的头文件:
typedef enum {
iTunesESrcLibrary = 'kLib',
iTunesESrcIPod = 'kPod',
iTunesESrcAudioCD = 'kACD',
iTunesESrcMP3CD = 'kMCD',
iTunesESrcDevice = 'kDev',
iTunesESrcRadioTuner = 'kTun',
iTunesESrcSharedLibrary = 'kShd',
iTunesESrcUnknown = 'kUnk'
} iTunesESrc;
Run Code Online (Sandbox Code Playgroud)
我的理解是,enum值必须是整数,但这个定义似乎违反了这个规则.此外,似乎将这些enum值视为整数(NSPredicate例如,在一个中)并不是正确的事情.
我将enum上面的声明添加到一个带有空main函数的C文件中,并使用它编译i686-apple-darwin9-gcc-4.0.1.因此,虽然这些类型的enums可能不符合C标准(正如Parappa在下面指出的那样),但它们至少被gcc 编译成某种类型.
那么,那种类型是什么,以及如何在格式字符串中使用它?
在这里开始程序员......
我正在为我的计算机科学课写一个非常简单的程序,我遇到了一个我想更多了解的问题.这是我的代码:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
char courseLevel;
cout << "Will you be taking graduate or undergraduate level courses (enter 'U'"
" for undergraduate,'G' for graduate.";
cin >> courseLevel;
if (courseLevel == "U")
{
cout << "You selected undergraduate level courses.";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的if语句收到两条错误消息:1)未指定与字符串文字进行比较的结果(改为使用strncmp).2)指针和整数之间的比较('int'和'const char*').
我似乎已经通过将我的U封在单引号中解决了这个问题,或者程序至少仍然有效.但是,正如我所说,我只是想了解为什么我会收到错误,以便我能更好地理解我正在做的事情.