小编Dan*_*ing的帖子

将GCC称为"cc"与"gcc"

我知道在大多数GNU/Linux系统中,GCC可以通过命令行中的名称"cc"调用(而不是"gcc").当GCC以一种方式与另一种方式被调用时,它的行为是否有任何区别?

例如,我知道通过名称"g ++"而不是"gcc"调用GCC会导致GCC的行为不同(它将.c文件视为C++源代码和C++标准库中的链接)."gcc"和"cc"之间的行为有什么类似的差异吗?

编辑:到目前为止收到的答案中没有一个给出明确的 "是"或"否",以确定GCC在相对于另一种方式调用时是否会表现不同.然而,潜入源头检查其行为的想法导致我走上了这条道路.基于我在那里找到的东西,我现在相信答案是:

不.无论是通过"gcc"还是"cc"调用,GCC的行为都相同.

c linux compiler-construction gcc gnu

67
推荐指数
5
解决办法
3万
查看次数

如何正确引用匿名命名空间中的函数

考虑一下这段C++代码:

namespace
{
    void f()
    {
    }

    class A
    {
        void f()
        {
            ::f(); // VC++: error C2039: 'f' : is not a member of '`global namespace''
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

GCC编译就好了.Visual C++ 2008无法编译吐出C2039错误.这两个编译器中的哪一个在这里是正确的?有没有办法正确引用"全球" f

编辑: Zack建议尝试,它适用于两个编译器.看起来有点奇怪.

namespace
{
    void f()
    {
    }

    class A
    {
        void f();
    };
}

void A::f()
{
    ::f();
}
Run Code Online (Sandbox Code Playgroud)

c++ gcc namespaces visual-c++ language-lawyer

20
推荐指数
2
解决办法
5243
查看次数

SQL"IS"和"="运算符有何不同?

我正在构建一些使用参数化值的预准备语句.举个例子:

SELECT * FROM "Foo" WHERE "Bar"=@param
Run Code Online (Sandbox Code Playgroud)

有时@param可能会NULL.在这种情况下,我想查询返回记录,其中BarNULL的,但上面的查询不会那样做.我了解到我可以使用IS运算符.换一种说法:

SELECT * FROM "Foo" WHERE "Bar" IS @param
Run Code Online (Sandbox Code Playgroud)

除了不同的处理NULL方式之外,上述两种陈述的表现方式是否还有其他不同之处?如果@param不是NULL,但是,相反,让我们说,5IS在这种情况下使用操作员是安全(和理智)的事情吗?我应该采取其他方法吗?

sql sqlite null equality operators

16
推荐指数
3
解决办法
3万
查看次数

什么是C++终止处理程序Right Thing(TM)?

C++标准提供了一个std::set_terminate函数,它允许您指定std::terminate实际调用的函数.std::terminate应该只在严峻的情况下被调用,并且确定标准在被调用时所描述的情况是可怕的(例如未被捕获的异常).什么std::terminate时候被调用,这种情况似乎与失去记忆相似 - 你可以理智地做到这一点.

我已经读过它可以用来确保释放资源 - 但是对于大多数资源,这应该在进程退出时由OS自动处理(例如文件句柄).从理论上讲,我可以看到一个案例,如果说,你需要在退出时由于崩溃而向服务器发送特定的消息.但是OS操作的大部分时间应该足够了.

何时使用终止处理程序Right Thing(TM)?

更新:对使用自定义终止处理程序可以做什么感兴趣的人可能会发现这种非便携技巧很有用.

c++ resources standards exception-handling terminate

11
推荐指数
2
解决办法
3358
查看次数

为什么GCC允许在C++中使用round(),即使使用ansi和pedantic标志?

有没有一个很好的理由为什么这个程序在GCC下编译,即使使用-ansi-pedantic标志?

#include <cmath>

int main (int argc, char *argv [])
{
     double x = 0.5;

     return static_cast<int>(round(x));
}
Run Code Online (Sandbox Code Playgroud)

用它来编译干净(没有警告,甚至)g++ -ansi -pedantic -Wall test.cpp -o test.

我看到两个问题:

  1. round() 在ISO-conformant模式下不应该对C++可用(因为它来自C99)
  2. 即使round()在这种情况下可用,它也应该只是std命名空间

我错了吗?

c++ gcc rounding c++98

6
推荐指数
1
解决办法
1704
查看次数

使git分支成为主分支

我的主分支与我的开发分支是如此不同,我希望它成为我的主分支而不必进行合并,这可能吗?看起来如果我尝试合并,我可以走进很多工作.

git git-branch

6
推荐指数
1
解决办法
1135
查看次数

Git的索引概念如何改善或改变您的工作流程?

我一直试图在个人项目上使用Git近一个月了.

我对基本的命令集有很好的理解,虽然它的用户体验并不令人敬畏,但我仍然觉得自己比我过去使用的其他VCS更喜欢Git.

然而,我仍然认为我没有"获得"的一个概念是指数的真正目的.我有这种感觉,我没有利用它打算给予的一些好处.

有一个临时区域的目的是什么?来自SVN的土地,我已经习惯了将我的工作副本视为我的临时区域,而我的快照也是从我的提交中获取的.

所以,我的问题是:

这种额外的间接水平给你带来了什么?指数如何改善或改变您的正常工作流程?你能否提供任何让索引允许你做一些在没有它的情况下会遇到麻烦的事情?

git workflow dvcs

5
推荐指数
1
解决办法
295
查看次数

如何在make模式规则中的依赖项中使用依赖于模式的变量

我想在依赖于模式的变量中定义具有依赖关系的GNU make模式规则.我想要的是这样的:

%.exe : $(%_EXE_SOURCES) $(%_EXE_RESOURCES)
    $(CSC_V)$(CSC) $(CSCFLAGS) $($*_EXE_CSCFLAGS) -target:exe \
            -out:$@ $($*_EXE_SOURCES) $($*_EXE_RESOURCES)
Run Code Online (Sandbox Code Playgroud)

并在以后定义类似的东西

FOO_EXE_SOURCES = src/Foo.cs
all: Foo.exe
Run Code Online (Sandbox Code Playgroud)

提出的规则有助于建立; 在规则的主体中,$($*_EXE_SOURCES)变量被扩展为$(FOO_EXE_SOURCES),扩展为src/Foo.cs.但是,依赖关系不能正确扩展; 更改src/Foo.cs不会导致重建Foo.exe.

我怀疑这实际上不能在make中完成,但也许有人有一个类似工作的make片段?

makefile gnu-make

4
推荐指数
1
解决办法
3039
查看次数