我一直在愚弄一些代码,看到一些我不理解"为什么"的东西.
int i = 6;
int j;
int *ptr = &i;
int *ptr1 = &j
j = i++;
//now j == 6 and i == 7. Straightforward.
Run Code Online (Sandbox Code Playgroud)
如果您将操作员放在等号的左侧怎么办?
++ptr = ptr1;
Run Code Online (Sandbox Code Playgroud)
相当于
(ptr = ptr + 1) = ptr1;
Run Code Online (Sandbox Code Playgroud)
而
ptr++ = ptr1;
Run Code Online (Sandbox Code Playgroud)
相当于
ptr = ptr + 1 = ptr1;
Run Code Online (Sandbox Code Playgroud)
后缀运行编译错误,我得到它.你在赋值运算符的左侧有一个常量"ptr + 1".很公平.
一个编译的前缀和C++中的WORKS.是的,我理解它很乱,你正在处理未分配的内存,但它可以工作和编译.在C中,这不会编译,返回与后缀"左值作为赋值的左操作数所需的左值"相同的错误.无论如何编写,使用两个"="运算符或"++ ptr"语法扩展,都会发生这种情况.
C如何处理这样的赋值和C++如何处理它有什么区别?
高级背景:
我的工作场所已经存在了数十年,这里的许多员工也是如此。我今年年初加入,但是在其他地方有很多经验。
早在我的第一份工作时,我就自学了Git,这实际上是一个2人项目。我搞砸了很多事情,实践了很多事情,所以我来自敲门打鼓的学校。正如我在给某些部门负责人的电子邮件中写的那样
[…]我不是git专家。无论好坏,我在这家公司都是:\ […]
我们只是从一个过时的源代码控制(锁定文件,复制文件等)切换到了Git / Bitbucket。大多数人(以及较早的人)都在适应新协议,而我和其他一些人正在尽我们所能。
我正在处理的人:
有一个家伙,一个大家伙,是curmudgeon。我和他相处得很好,但他是一个难以克服的坚果。他不想学习新事物,他希望它很简单。顺便说一句,这不是一个愚蠢的家伙,自从C ++发布以来,他一直在使用C ++进行编程,此外,他还编写了用于从产品(从头开始)连接到数据库的驱动程序。他从事的许多代码都是他自己的东西,本质上是其他部门使用的库,尽管他的大部分工作都在其他人也可以修改的共享代码文件中。
他已经接受我知道我在说什么,但他是老狗。Git基于“差异”与实际文件的概念具有他不希望学习的使用场景,例如创建新分支。他想要一个简单的程序。
为辩护,我是一位很好的老师。我曾与其他许多员工一起工作过,他们似乎现在就了解了,并且正在使用Git / Bitbucket淘汰他们的代码。
他想要什么:
回到curmudgeon,他希望一个分支继续工作。他不想签出新分支,切换分支,也不想知道分支。他希望自己完成工作,提交,提出请求并继续工作。
这只是一个人,公司中的大多数人都愿意改变。在过去的一周中,我与他共坐了大约5-6个小时。我之所以喜欢它,是因为我们彼此尊重,我也认为这是我的公司职责,因为我是在这里做到最好的装备(许多人发现他很难与他交谈,所以他有点像在自己的泡沫中工作,再加上这里没有多少人我做的Git的舒适度)。此外,他还全神贯注于Git的一些核心基础知识,例如暂存,本地与远程等。
尽管并不理想,但如果他每隔一段时间从master分支合并到自己的分支,并在可预见的将来仅在其一个分支上工作,这将是一个“足够好”的解决方法吗?希望我能逐渐使他成为一个好的“公民”。最糟糕的是,这家伙可能会在几年内退休。
这是一个定时炸弹吗?它会破坏主分支的历史吗(假设所有合并冲突都得到正确解决;这对他来说不是问题)?
我的脚本中有一个字符串变量,由ls -l中的9个权限字符组成
例如:
rwxr-xr--
我想操纵它,使它显示如下:
r w x r - x r - -
Run Code Online (Sandbox Code Playgroud)
IE每隔三个字符分隔标签,其他所有字符用空格分隔.我最接近的是使用printf
printf "%c %c %c\t%c %c %c\t%c %c %c\t/\n" "$output"{1..9}
Run Code Online (Sandbox Code Playgroud)
这仅打印第一个字符,但格式正确
我敢肯定有一种方法可以使用我想不到的"sed"来做到这一点
有什么建议?
我目前正在努力完成一些传递给我的代码.它是在Visual Studio 2005年的MFC中编写的,被搁置了,现在被带到我身边.
虽然我知道C++,但我花了最近2个月的时间研究代码并学习MFC,它开始融合在一起.
代码的GUI是嵌入在不可见对话窗口中的SWF Flash文件.我没有SWF文件的源代码,因此将来可能会在WPF中重做它.我将WMMode设置为"Window",因为在透明/不透明模式下,它无法正常显示,每次捕获鼠标事件时它都会闪烁/闪烁.
无论如何,在Win XP/Vista中,单击并拖动闪光控件可以正常工作.在Windows 7/8.1中,它不会移动.
很高兴提供所需的任何和所有信息.我仍然对MFC对话有点不知所措,所以不确定你们都希望看到什么.
我发现了这个问题:通过在控件上单击并拖动来移动窗口
看起来它解决了很多问题.但是,我不希望整个控件像这样可点击,只有顶部.不幸的是,在MS Resource视图中,ActiveX控件是空白的,因为SWF仅在运行时加载; 我试图为这种事情找到资源,但这很难,因为我不确定要使用的技术术语.
编辑
我通过创建一个非常简单的MFC应用程序尝试了这一点,该应用程序具有静态文本控件而没有别的.我试图通过点击静态文本来使它工作(虽然我可能会把自己画成一个角落,因为它没有内置的lButtonDown事件).
这是相关代码:
class MyDialog : public CDialog
{
public:
MyDialog(CWnd* pParent = NULL) : CDialog(MyDialog::IDD, pParent)
{ }
// Dialog Data, name of dialog form
enum{ IDD = INTERFACE1 };
protected:
virtual void DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); }
//Called right after constructor. Initialize things here.
virtual BOOL OnInitDialog()
{
CDialog::OnInitDialog();
pText = (CStatic *)GetDlgItem(ID_TEXT);
pText->SetWindowTextW(_T("Hello World!"));
return true;
}
afx_msg void OnLButtonDown(UINT nFlags, CPoint …Run Code Online (Sandbox Code Playgroud) 案例:
void CMainWindow::OnPaint ()
{
CRect rect;
GetClientRect (&rect);
CPaintDC dc (this);
dc.SetViewportOrg (rect.Width () / 2, rect.Height () / 2);
dc.SetBkMode (TRANSPARENT);
for (int i=0; i<3600; i+=150) {
LOGFONT lf;
::ZeroMemory (&lf, sizeof (lf));
lf.lfHeight = 160;
lf.lfWeight = FW_BOLD;
lf.lfEscapement = i;
lf.lfOrientation = i;
::lstrcpy (lf.lfFaceName, _T ("Arial"));
CFont font;
font.CreatePointFontIndirect (&lf);
CFont* pOldFont = dc.SelectObject (&font);
dc.TextOut (0, 0, CString (_T (" Hello, MFC")));
//WHY THIS LINE?
dc.SelectObject (pOldFont);
}
}
Run Code Online (Sandbox Code Playgroud)
代码在围绕原点(移动到窗口中心)的圆圈中打印“Hello, MFC”。

为什么创建 CFont 指针然后 …