草庐IT

c++ - 仅当将值与 TRUE 进行比较时才会警告操作中 xxx 和 bool 的不安全混合

我有一个用C(C89兼容)实现的库。它定义了一个bool数据类型bool32。它还定义了bool文字TRUE和FALSE:#ifndefTRUE#defineTRUE(0==0)#endif#ifndefFALSE#defineFALSE(0!=0)#endiftypedefuint32_tbool32;像下面这样的C代码编译时没有警告:bool32h=TRUE;if(h==TRUE){}if(h==FALSE){}cpp中的相同代码编译时出现以下警告:1>[filename/line):warningC4805:'==':unsafemixoftype'bool32'andtype'

c++ - TR2 会在 C++17 中发布吗?

TR2里有很多甜蜜的东西.那会在C++17吗??据我所知,TR1是在2005年完成的,不得不等到C++11才被标准化。但我也明白TR2已经完成了?我的C++17链接没有提到任何关于TR2的内容,但我希望... 最佳答案 也许。TR(以及现在的技术规范)的要点是允许某些东西独立于标准迭代过程而变得成熟。他们可以发布一个TS,看看它是如何工作的,看看在实现和/或使用该功能时是否有任何问题,如果一切正常,他们可以将其“折叠”成完整的标准。根据每个TS的优点来考虑它是否会被纳入下一个标准。参见http://isocpp.org/std/st

c++ - 其他等效的有符号和无符号类型的别名

C和C++标准都允许相同整数类型的有符号和无符号变体相互使用别名。例如,unsignedint*和int*可能是别名。但这还不是全部,因为它们显然具有不同范围的可表示值。我有以下假设:如果通过int*读取一个unsignedint,该值必须在int范围内,否则会发生整数溢出并且行为未定义。这是正确的吗?如果通过unsignedint*读取int,则负值环绕,就好像它们被强制转换为unsignedint一样。这是正确的吗?如果该值在int和unsignedint范围内,则通过任一类型的指针访问它都是完全定义的并给出相同的值。这是正确的吗?此外,兼容但不等价的整数类型呢?在int和long

c++ - 从嵌入式 C/C++ 逻辑中删除 goto 语句

我想去掉这个goto语句。任何人都可以告诉我相同的逻辑。下面的代码不是我想要修改的确切代码,但它会支持我的问题。请不要在评论此帖子时询问代码的重要性,因为它只是一个示例。intresult[i][j];for(inti=0;i 最佳答案 将这些循环放入一个函数中,为其指定一个合适的名称,并在完成后return;。如果它复杂到需要两个循环,它就值得一个名字。finishedflag很难读懂,所以无论如何你都应该把它放在它自己的函数中,让它过时。异常仅适用于您无法在本地处理的错误。使用它们来通知更高级别的功能您无法修复的错误,而不是如果

c++ - 在 CPP 类中声明一个 C 函数作为友元

我需要在C函数中使用类的私有(private)变量。我正在做这样的事情classHelper{private:std::stringname;public:std::getName(){returnname;}friendextern"C"voidinitializeHelper();};但是这段代码给出了错误unqualified-idbeforestringconstant外部“C”{我无法确定我在这里做错了什么。 最佳答案 只需在你的课前转发声明这个函数:extern"C"voidfoo();然后你可以在friend声明中使用

c++ - 更改 Makefile 标志时如何强制重新编译?

我正在编译一些具有依赖性的项目,因此我不必每次都重新编译,但是当我将-Dsome_flags添加到我的CFLAGS时,它不会重新编译。dep:$(CPPS)$(CC)$(CFLAGS)$(INC)-M$(CPPS)>dep我添加到我的CFLAS-DDEBUG_FLAG,它迫使我做makeclean和make而不是make。 最佳答案 它不会重新编译,因为您没有将makefile本身列为依赖项。dep:$(CPPS)Makefile$(CC)$(CFLAGS)$(INC)-M$(CPPS)>dep也就是说,如果您从命令行输入make标

c++ - 指向字符串和字符的指针捕获 22

我正在研究指针,当我看到char*p[10]时,我卡住了。因为有些事情被误解了。谁能一步步、一针见血地解释为什么我的逻辑是错误的,错误是什么,我认为哪里错了,我应该怎么想。因为我想准确地学习。还有int*p[10];呢?此外,例如x是指向char的指针,但只是char而不是chars。但是怎么会char*x="possible";我认为上面一个应该是正确的但是,我看到了char*name[]={"nomonth","jan","feb"};我真的很困惑。 最佳答案 您的char*p[10]图显示了一个数组,其中每个元素指向一个字符。

c++ - 何时不在 C 中创建单独的接口(interface) (.h) 和实现 (.c)?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我目前正在过渡到使用C语言工作,主要专注于开发大型库。我曾使用C++进行大量基于应用程序的编程,尽管我不能声称精通这两种语言。我很好奇的是,许多流行的开源库何时以及为什么选择不将它们的代码与.h文件和相应的.c文件以1-1的关系分开——即使在.c文件不存在的情况下'生成可执行文件。在过去,我被引导相信以这种方式构建代码不仅在组织上是最佳的,而且对于链接目的也是最佳的——我不明白C语言缺少O

c++ - 如何将 unsigned char 数组转换为 unsigned long long?

假设我有8个unsignedchar,我想将其转换为unsignedlonglong。例如,如果所有char都等于0xFF,则unsignedlonglong将等于0xFFFFFFFFFFFFFFFF。使用C或C++最有效的方法是什么? 最佳答案 例如:unsignedcharbuffer[8]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};unsignedlonglongtarget;memcpy(&target,buffer,sizeoftarget);请注意,如果buffer的所有元素并非

c++ - 字节顺序是在编译时决定的吗?

我现在想偷懒,写一些代码,如果目标机器的字节顺序与我自己的不同,这些代码就会中断。但是我当然想知道它什么时候坏了,所以我可以在必要时修复它。float和整数的字节顺序是否是已编译程序的一个属性,这样我就可以在编译时通过断言以某种方式检查它?还是我必须在运行时断言? 最佳答案 是的,字节序是相关机器固有的,并且在编译时已知。大多数操作系统都会在某处设置一个#define来告诉您字节序是什么。特别是在Linux上,您可以执行以下操作:#if__BYTE_ORDER==__LITTLE_ENDIAN...#elif__BYTE_ORDER