我注意到Linux内核代码使用bool,但我认为bool是C++类型.bool是标准C扩展(例如,ISO C90)还是GCC扩展?
我个人是三元运算符的拥护者:()?:; 我确实意识到它有它的位置,但我遇到了许多完全反对使用它的程序员,而且有些人经常使用它.
你有什么感受?你看到了什么有趣的代码?
我可以假设(bool)true == (int)1任何C++编译器吗?
我们知道任何不相等的数字0都被视为trueC,所以我们可以写:
int a = 16;
while (a--)
printf("%d\n", a); // prints numbers from 15 to 0
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否将真/假定义为C中的1/ 0,所以我尝试了下面的代码:
printf("True = %d, False = %d\n", (0 == 0), (0 != 0)); // prints: True = 1, False = 0
Run Code Online (Sandbox Code Playgroud)
请问C标准明确指示的真正的真值和假的1和0分别?
我认为这是一个简单的问题,但我正在努力解决以下问题.在示例中,我有以下语句(语言是C):
int foobar
if (foobar)
{
// do something.
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我对此是正确的,当foobar不为零时,这种说法是正确的.所以它应该与if(foobar!= 0)相同;
但是,如果foobar成为负数,会发生什么?
这个问题出现在问题答案的评论中.当类型转换为int时,C/C++ bool类型总是保证为0或1吗?
有问题的代码在bool不初始化其值的情况下分配(本地)数组.
const int n = 100;
bool b[n];
Run Code Online (Sandbox Code Playgroud)
显然,价值观b是不确定的.
一些评论者认为阅读b[0]是不明确的行为.这是在C++标准中的任何地方陈述的吗?我仍然相信相反:
显然存储已分配,并且基本bool类型的初始化已完成,因为它没有构造函数.因此,它肯定与取消引用未初始化的指针或在未初始化的非平凡对象上调用方法/强制转换操作符不同.标准似乎涵盖了这些具体案例.
C中的行为确实未定义:C中声明的未初始化变量会发生什么?它有价值吗?一些受访者似乎对这两者感到困惑.
在最新的C++ 0x草案中,我找不到不确定值的定义,尤其是没有允许访问这样的值来触发处理器陷阱的定义.事实上,Bjarne的Stroustrup的是不知道的inderminate值可能是什么:http://zamanbakshifirst.blogspot.com/2007/02/c-indeterminate-value.html
我只见过在if语句中使用"==".那么"=="在这种情况下如何运作?
a = 5;
b = (a == 18 % 13);
Run Code Online (Sandbox Code Playgroud) 以下问题(和答案)表明转换为int时bool的值将为0或1.
我的问题是编译器是否可以在内部将值表示为其他内容(直到转换).我隐约回想起MSVC调试器显示表示bool的字节的数值,如果它不是0或1,我似乎记得有时看到255(0xFF).
换句话说,下面的代码可以返回0或1以外的东西吗?
int boolval(bool z) {
return *(unsigned char *)&z;
}
Run Code Online (Sandbox Code Playgroud)
我目前正在使用二进制格式,bool在结构中使用's,我看到的是255而不是0和1.
编辑:我刚刚发现了一个几乎完全相同的问题所以我在这里链接它以获取更多信息. bool在记忆中如何表现? 谢谢你的回答.
为什么在比较操作完成后,下面的程序给出了相反的答案?
main()
{
int k=35;
printf("%d\n%d\n%d",k==35,k=50,k<40);
}
Run Code Online (Sandbox Code Playgroud)
产量
0 50 1
我很想知道这两个if块在c ++中是否存在差异.如果得到答案你会引用一些参考,这将是非常有用的.
if ( intVar!= 0 )
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
和
if (intVar)
{
//Do samething
}
Run Code Online (Sandbox Code Playgroud)
其中intVar,可以是任何类型的具有任何值的整数变量.
[编辑]关于主题"重复的问题".我没有发现任何涉及if语句的问题.
c++ ×6
c ×5
boolean ×3
casting ×1
gcc ×1
if-statement ×1
int ×1
linux-kernel ×1
multilingual ×1