假设您在C/C++中有一个函数,它在第一次运行时表现出某种特定的行为.然后,所有其他时间它表现出另一种方式(例如见下文).在第一次运行之后,if语句变得多余,如果速度很重要,可以将其优化掉.有没有办法进行这种优化?
bool val = true;
void function1() {
if (val == true) {
// do something
val = false;
}
else {
// do other stuff, val is never set to true again
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个大文件,我只对前几兆字节感兴趣.
如何从unix/linux中的大文件中提取第一个x-megabyte并将其放入单独的文件中?
(我知道split命令可以将文件拆分成多个部分.使用bash脚本我可以删除我不想要的部分.我希望更简单的方法)
我正在开发一个软件库,用于嵌入式系统,如ARM芯片或TI DSP(对于大多数嵌入式系统,但如果它也可以在PC环境中使用它也会很好).显然,这是一个非常广泛的目标系统,因此能够轻松移植到不同的系统是一个优先事项.该库将用于与特定硬件接口并运行一些算法.
我认为C++是C语言的最佳选择,因为它更易于维护和阅读.我认为额外的开销是值得的,因为它能够在面向对象的范例中工作.如果我是为一个非常具体的系统编写的,我会在C中工作,但事实并非如此.
我假设现在大多数流行嵌入式系统的编译器都可以处理C++.它是否正确?
我还应该考虑其他因素吗?我的思路是否正确?
我试图在Visual Studio 2010 C++项目中使用DLL.我按照这里的指示,但http://msdn.microsoft.com/en-us/library/ms235636(v=vs.80).aspx我似乎无法添加对我的项目的引用.
当我打开添加引用时,我无法添加任何引用,如下所示.

我在这做错了什么?
通过取自定义:http://www.cplusplus.com/reference/iostream/ostream/flush/,为什么存在的功能,目的是什么,你会使用它,因为这是不明确的.为什么不在每次写入流时调用flush()?
在C++中,我想创建在声明时自动添加到地图(或向量,在这种情况下并不重要)的函数作为函数指针,稍后会自动调用.例如,如果我正在编写单元测试框架,并且我只是希望用户像这样声明每个单元测试,这将非常有用:
UNIT_TEST_FUNCTION(function_name){
// do something
}
Run Code Online (Sandbox Code Playgroud)
而是这样的东西被调用
void function_name(){
//do something
}
int temp = register_function("function_name", function_name);
Run Code Online (Sandbox Code Playgroud)
其中register_function()在函数指针的映射中添加用户定义的函数.基本上,我需要一种在函数定义之后添加额外代码行的机制,以便在定义的函数上自动执行某些操作.这可能是使用宏吗?
我有一个使用SPI进行通信的芯片,并希望将其直接连接到我的计算机上的USB端口.有没有人有使用USB转SPI转换器的经验?有什么建议?网上快速搜索显示
http://www.robotshop.com/devantec-usb-i2c-spi-serial-interface.html
可能重复:
签名/未签名比较
所以我有下面的代码,它将unsigned int设置为负数,然后将unsigned int与相同的负数进行比较.我得到的输出是"不等于".据我所知,在将unsigned int设置为-1时,unsigned int的值在这种情况下设置为255.
#include <stdint.h>
#include <iostream>
int main(int argc, char **argv)
{
uint8_t test = 0;
int8_t set = -1;
test = set;
if (test == set) {
std::cout << "Equal";
} else {
std::cout << "Not Equal";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,是什么导致等操作数返回false?这似乎与类似问题的答案形成鲜明对比.签名/未签名比较表明
许多期望算术或枚举类型的操作数的二元运算符会以类似的方式引起转换并产生结果类型.目的是产生一个通用类型,它也是结果的类型.此模式称为通常的算术转换,其定义如下:
如果任一操作数的类型为long double,则另一个操作数应转换为long double.
否则,如果任一操作数为double,则另一个操作数应转换为double.
否则,如果任一操作数是浮点数,则另一个操作数应转换为浮点数.
否则,应在两个操作数上执行整数促销(4.5).54)
然后,如果任一操作数是无符号长的,则另一个操作数应转换为无符号长整数.
否则,如果一个操作数是long int而另一个是unsigned int,那么如果long int可以表示unsigned int的所有值,则unsigned int应该转换为long int; 否则两个操作数都应转换为unsigned long int.
否则,如果任一操作数为long,则另一个操作数应转换为long.
否则,如果任一操作数是无符号的,则另一个操作数应转换为无符号.
因此,根据这个答案,由于两个操作数都是无符号的,另一个应转换为无符号,并且相等应该通过.但它显然没有通过,而且正如在这个问题中已经回答的那样,它们都被提升为签署的内容.
我正在查看一个操作 HTML A 标签的 javascript 代码,但我无法理解它如何设置“onclick”属性。它似乎告诉它用索引变量 j 更新 ytplayer_playitem 然后调用 ytplayer_playlazy(1000)
但是所有的括号是怎么回事?javascript 语法中的哪些细节允许像这样设置?
var a = document.createElement("a");
a.href = "#ytplayer";
a.onclick = (function (j) {
return function () {
ytplayer_playitem = j;
ytplayer_playlazy(1000);
};
})(i);
Run Code Online (Sandbox Code Playgroud) 所以我下载并安装了matplotlib.奇怪的是,当我们将它们放在home/user/Desktop中时,我可以正常运行这些示例,但当我将它们移动到home/user/Documents时,它们停止工作,我收到以下消息.Documents文件夹中是否有一些特殊内容阻止了matplotlib的导入?
Traceback (most recent call last):
File "contour_manual.py", line 4, in <module>
import matplotlib.pyplot as plt
File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 23, in <module>
from matplotlib.figure import Figure, figaspect
File "/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py", line 18, in <module>
from axes import Axes, SubplotBase, subplot_class_factory
File "/usr/local/lib/python2.7/dist-packages/matplotlib/axes.py", line 8454, in <module>
Subplot = subplot_class_factory()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/axes.py", line 8446, in subplot_class_factory
new_class = new.classobj("%sSubplot" % (axes_class.__name__),
AttributeError: 'module' object has no attribute 'classobj'
Run Code Online (Sandbox Code Playgroud) 我使用Windows 7 64位与MSVC2005和QT(但我怀疑QT导致问题,因为这是基本数据类型char的问题.
所以,当我尝试比较两个char时,就像这样
char A=0xAA;
if(A==0xAA)
printf("Success");
else
printf("Fail");
Run Code Online (Sandbox Code Playgroud)
瞧,它失败了!但是当我这样做的时候
char A=0xAA;
char B=0xAA;
if(A==B)
printf("Success");
else
printf("Fail");
Run Code Online (Sandbox Code Playgroud)
我成功了!实际上当我想到它...嘿我正在使用64位处理器..即使char应该被视为1个字节.它可能存储为4个字节.所以
char A=0xAA;
if(A==0xFFFFFFAA)
printf("Success");
else
printf("Fail");
Run Code Online (Sandbox Code Playgroud)
现在我成功了!!!
但是WTF!这是标准行为!! 如果该死的东西被定义为char,那么编译器不应该知道如何处理它吗?进一步的测试显示,如果char的最高有效位为1,则额外字节仅存储为1.因此0x07和更低的存储为0x00000007.WTF.
实际上我似乎已经回答了我的所有问题...除了谁打电话来修复这个错误.这甚至是一个错误吗?您可以在64位操作系统上使用MSVC2005,或者我是一个白痴.我想我应该让qt创建者使用MSVC2010 ..该死的.我花了2个小时.
使用C++,我有
struct Base {
virtual void stuff(/*base stuff*/);
};
struct Derived : public Base {
void stuff(/*derived stuff*/);
};
void function1(Derived& obj){
obj.stuff();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,function1将使用Derived的do()函数.如果在function1中,我想调用Base类的do()函数呢?如果我将function1称为function1(dynamic_cast<Base*>(derived_obj_ptr))?它会起作用
吗?
c++ ×6
c ×3
command-line ×1
dd ×1
dll ×1
embedded ×1
flush ×1
inheritance ×1
iostream ×1
javascript ×1
linux ×1
macros ×1
matplotlib ×1
onclick ×1
optimization ×1
ostream ×1
performance ×1
python ×1
spi ×1
ubuntu ×1
unix ×1
usb ×1
windows-7 ×1