通过一个小错字,我意外地发现了这个结构:
int main(void) {
char foo = 'c';
switch(foo)
{
printf("Cant Touch This\n"); // This line is Unreachable
case 'a': printf("A\n"); break;
case 'b': printf("B\n"); break;
case 'c': printf("C\n"); break;
case 'd': printf("D\n"); break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
似乎声明printf的顶部switch是有效的,但也完全无法访问.
我得到了一个干净的编译,甚至没有关于无法访问的代码的警告,但这似乎毫无意义.
编译器是否应将此标记为无法访问的代码?
这有什么用途吗?
我对CSS比较陌生,并且用它来改变文本的样式和格式.
我现在想用它来插入文本,如下所示:
<span class="OwnerJoe">reconcile all entries</span>
Run Code Online (Sandbox Code Playgroud)
我希望我可以表现为:
Joe的任务:协调所有条目
也就是说,仅仅因为成为"所有者乔"类,我希望Joe's Task:显示文本.
我可以用以下代码来做到:
<span class="OwnerJoe">Joe's Task:</span> reconcile all entries.
Run Code Online (Sandbox Code Playgroud)
但是,对于指定类和文本来说,这似乎是多余的.
有可能做我正在寻找的事情吗?
编辑 一个想法是尝试将其设置为ListItem <li>,其中"bullet"是文本"Joe的任务".我看到了如何为子弹设置各种子弹样式甚至图像的示例.是否可以为list-bullet使用一小块文本?
我正在尝试用我的相机在文件名的bash中构造一个数组:
FILES=(2011-09-04 21.43.02.jpg
2011-09-05 10.23.14.jpg
2011-09-09 12.31.16.jpg
2011-09-11 08.43.12.jpg)
Run Code Online (Sandbox Code Playgroud)
如您所见,每个文件名中间都有一个空格.
我已经尝试用引号括起每个名字,然后用反斜杠转义空格,两者都不起作用.
当我尝试访问数组元素时,它继续将空格视为elementdelimiter.
如何正确捕获名称中包含空格的文件名?
当一个变量等于我设置的某个值时,我喜欢让GDB设置一个断点,我试过这个例子:
#include <stdio.h>
main()
{
int i = 0;
for(i=0;i<7;++i)
printf("%d\n", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GDB的输出:
(gdb) break if ((int)i == 5)
No default breakpoint address now.
(gdb) run
Starting program: /home/SIFE/run
0
1
2
3
4
5
6
Program exited normally.
(gdb)
Run Code Online (Sandbox Code Playgroud)
就像你看到的那样,GDB并没有提出任何突破点,这可能与GDB有关吗?
在C#中,似乎定义枚举在末尾使用或不使用分号:
public enum DaysOfWeek
{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} ; //Optional Semicolon?
Run Code Online (Sandbox Code Playgroud)
来自MSDN的这个C#页面显示以分号结尾的枚举,除了CarOptions.
我没有找到任何明确的引用,并且两种方式似乎都可以在没有编译器警告的情况下工作.
那么是否应该有最终的分号?
是否有可能使析构函数捕获异常然后重新抛出它们?
如果是这样,我将如何做到这一点,因为try声明没有明确的地方?
基本上,我想理想地做:
CMyObject::~CMyObject()
{
catch(...) // Catch without a try. Possible?
{
LogSomeInfo();
throw; // re-throw the same exception
}
// Normal Destructor operations
}
Run Code Online (Sandbox Code Playgroud)
背景
我有一个庞大的,复杂的应用程序,在某处抛出未处理的异常.我没有轻松访问main或顶级消息泵或任何类似的东西,所以没有容易捕获所有未处理的异常的地方.
我认为任何未处理的异常必须通过一堆析构函数,因为堆栈是解开的.所以,我正在考虑catch在析构函数中散布一堆语句.然后,至少我会知道抛出异常时正在播放的对象.但我不知道这是否可行,或者是否可取.
现代CPU具有广泛的流水线操作,也就是说,它们在实际执行指令之前很久就会加载必要的指令和数据.
有时,加载到管道中的数据会失效,必须清除管道并重新加载新数据.重新填充管道所需的时间可能相当长,并导致性能下降.
如果我在C中调用一个函数指针,那么管道是否足够智能以实现管道中的指针是一个函数指针,并且它应该跟随该指针用于下一个指令?或者是否有一个函数指针导致管道清除并降低性能?
我在C中工作,但我想这在C++中更为重要,因为许多函数调用都是通过v-tables进行的.
要成为函数调用的真正性能,您调用的函数必须非常简短.如果您通过测量代码来观察这一点,那么您最终应该重新审视您的设计以允许内联调用
不幸的是,这可能是我陷入的陷阱.
出于性能原因,我编写了小而快的目标函数.
但是它被函数指针引用,因此它可以很容易地被其他函数替换(只需使指针引用一个不同的函数!).因为我通过函数指针引用它,所以我认为它不能内联.
所以,我有一个非常简短,没有内联的功能.
我有一个简单的小代码片段令我感到沮丧:
HashSet<long> groupUIDs = new HashSet<long>();
groupUIDs.Add(uid)? unique++ : dupes++;
Run Code Online (Sandbox Code Playgroud)
在编译时,它会生成错误:
只有赋值,调用,递增,递减和新对象表达式才能用作语句
HashSet.Add 记录为返回bool,因此三元(?)运算符应该工作,这看起来像是一种完全合法的方式来跟踪我添加到哈希集的唯一和重复项的数量.
当我将其重新格式化为if-then-else时,它可以正常工作.
任何人都可以解释错误,如果有一种方法可以做一个简单的三元运算符?
class complex
{
float x,y;
public:
complex(){} //constructor with no arguments //what is use of giving such constructor
complex(float z){x=y=z;}//constructor with 1 argument.
complex(float real,float imag)
{x=real;y=imag;}
friend complex sum(complex,complex);
friend void show(complex);
};
complex sum(complex c1,complex c2)
{
complex c3;
c3.x=c1.x+c2.x;
c3.y=c1.y+c2.y;
return (c3);
}
void show (complex c)
{
cout<<c.x<<"+j"<<c.y<<"\n";
}
int main()
{
complex p,q,r;
p=complex(2.5,3.9);
q=complex(1.6,2.5);
r=sum(p,q);
cout<<"p=";show(p);
cout<<"q=";show(q);
cout<<"r=";show(r);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我需要确定我的程序是否以完全管理员权限运行.我的意思是,如果打开uac(对于win vista/7),我需要确定该程序是否实际具有管理员权限(如果用户右键单击并选择"作为管理员运行")并且不受uac限制.我如何在C++中执行此操作?