小编Mue*_*ito的帖子

在#error预处理程序指令中有撇号的警告

如果我尝试编译一个文件(error_c11.cpp),其内容是:

 #if 0
 #error This shouldn't be a problem
 #endif
Run Code Online (Sandbox Code Playgroud)

使用命令行:

gcc error_c11.cpp
Run Code Online (Sandbox Code Playgroud)

我收到以下警告(然后是关于main的一些其他链接器错误):

error_c11.cpp:2:20: warning: missing terminating ' character
 #error This shouldn't be a problem
Run Code Online (Sandbox Code Playgroud)

相反,使用clangVisual Studio 编译相同内容并不会发出任何警告.这是gcc(使用v4.9.3)中的错误,或者,预处理程序指令中'不允许使用哪些字符#error,而其他编译器更宽松?

c++ c-preprocessor

3
推荐指数
1
解决办法
288
查看次数

从 CMake 设置 iOS“启动屏幕文件”

我正在使用 Xcode 8 开发一个 iOS 项目,该项目是通过 CMake 生成的。在 CMake 中,您可以使用AppIconand指定LaunchImage和。这些对应于Xcode 项目中的Xcode 属性(带有前缀)。XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAMEXCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAMEXCODE_ATTRIBUTE_

但是,启动屏幕文件似乎没有保存为类似的属性。事实上,我根本不知道它是如何保存的 - 修改它显然根本不会更改 project.pbxproj 文件。有没有办法在CMake生成过程中指定文件?

xcode cmake ios

3
推荐指数
1
解决办法
1093
查看次数

在流程退出时中断Visual Studio

我在确定导致流程退出的原因时遇到了一些困难。我正在调试的一些关闭代码中有一个断点,但是在该断点处插入调试器并单步执行之后,整个过程将立即退出。每个线程在输出窗口中报告退出代码为-1。那时进程中有很多线程,并且代码库很大,因此很难找到问题的根源。

我已经尝试安装一个std::atexit函数,但是没有成功。我还尝试了覆盖SetUnhandledExceptionFilter,以防它是由崩溃引起的,并且也不会被击中。该项目的异常已禁用(#define _HAS_EXCEPTIONS=0),因此我无法调用std::set_terminate或std::set_unexpected。

还有其他方法可以确定导致流程退出的原因吗?当进程即将终止时,在调试器中中断的某些选项?

c++ atexit visual-studio visual-c++

3
推荐指数
1
解决办法
2122
查看次数

计数排列 - 将计数器存储在数组中

输入: 我有一些数组,如:

1, 2, 3, 4, 5
2, 1, 3, 4, 5
3, 2, 5, 4, 1
5, 4, 3, 1, 2
.....
Run Code Online (Sandbox Code Playgroud)

所有这些都是5位数的非重复排列 - 5C5.行可以重复,但行中的任何数字都是唯一的.

目标: 计算输入数据中每种类型(排列)的数组数量.

我的想法: 5C5说只有120个唯一的行可以.所以我可以在int[120]数组中存储计数器.并在读取输入时递增它们.

我的问题: 是否有任何有效的算法将此数组转换(哈希)到数组索引?

优先语言是C,带有指针和手动内存管理.在完美的情况下,我正在尝试做类似的事情:

FILE *f;
int counters[120] = {0};
char seq[20];
parse_line(f, seq); #scans and parses string into array
counters[hash(seq)]++;
Run Code Online (Sandbox Code Playgroud)

PS: 我通过解决"UVa 157 - 回收"来激发这个问题的灵感.后来我看到了解决方案并理解我误解了任务,但问题没有得到解决.

c arrays algorithm onlinejudge

2
推荐指数
1
解决办法
150
查看次数

发出警告并编译警告 - 错误违反合规性?

我的问题(单行注释延续)让我想知道编译器合规性和警告消息,特别是许多编译器中的警告错误功能.

从C++规范,§1.4.2.1规定:

如果某个程序不违反本国际标准中的规则,则符合条件的实施应在其资源限制内接受并正确执行该程序.

如果警告消息发出这在技术上符合标准(在我的链接的问题),即使我特别强调了要发出警告(再次,在我的例子,如果我使用的代码-Wcomments与海湾合作委员会),我用的警告-as-errors(-Werror),程序不会编译.我意识到这是相当迟钝的,因为我可以通过多种方式解决问题.但是,根据引用,这是否违反了通常允许的标准,或以某种方式明确允许?

c++ language-lawyer

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

git p4 sync - perforce 更改去了哪里?

在我当前的设置中,在 Perforce 仓库中所做的所有更改都迁移到了 git 存储库。转移是一种方式,总是从 Perforce 到 git,而不是相反。使用git p4 clone将 depot 复制到新的 git repo没有问题,但是,我现在正在尝试使用git p4 sync,并且我的 repo 没有更新。

当我运行时git p4 sync,它确实显示了从 Perforce depot 导入新更改的状态消息。如果我再次运行该命令,它会说一切都是最新的。我的master分支没有更改,并且我的存储库中没有列出任何其他分支或远程(例如使用git branch -v和git remote -v。我如何检查这些更改?

(使用git version 2.3.2 (Apple Git-55))。

git perforce git-p4

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

Qt5和CMAKE_AUTORCC

我正在尝试使用Qt移植现有项目以使用cmake。该项目有(几个)ui和(一个)qrc文件。在CMakeLists.txt中,如果我使用:

set(CMAKE_AUTOUIC ON)
Run Code Online (Sandbox Code Playgroud)

并生成一个Visual Studio(2015)项目,它具有一个预构建步骤,即从ui文件生成源,并将这些生成的文件添加到VS项目中。但是,如果我将qrc文件包括在项目源中,然后进行设置:

set(CMAKE_AUTORCC ON)
Run Code Online (Sandbox Code Playgroud)

生成的项目不再具有预构建步骤。它确实包含相应的qrc.cpp文件。但是,在项目构建时,它失败是因为该文件不存在,也不会生成。我也尝试设置CMAKE_AUTORCC为OFF,并使用QT5_ADD_RESOURCES。这不会删除ui预构建步骤,但是不会将添加qrc.cpp到项目中。

我正在使用Qt 5.6.0和cmake 3.5.2。

c++ qt cmake

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

模板专业化函数c ++

这是我的代码:

#include <iostream>
using namespace std;

template< typename T >
T silnia( T w ) {
    cout << "not special" << endl;
}
template<>
int silnia<int>( int x ) {
    cout << "special" << endl;
}

int main() {

cout << silnia<double>(5) << endl;
cout << silnia<int>(5) << endl;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

not special
nan
special
4712544
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解哪两个额外的线来自哪里?

c++ templates cout

0
推荐指数
1
解决办法
46
查看次数

while(scanf("%d",&n),n)是什么意思?

给出以下代码:

// this is a solution of uva 12279    
#include<stdio.h>

int main()
{
    int arr[10000],i,n,a,d=0,e=75;
    while(scanf("%d",&n),n)// what's that means?
    {
        d++;
        int c=0,b=0;

        if(n==0)
            return 0;

        for(i=0;i<n;i++)
            scanf("%d",&arr[i]);

        for(i=0;i<n;i++)//this is for loop
        {
            if(arr[i]==0)
                c++;
            else
                b++;
        }
        a=b-c;

       printf("Case %d: %d\n",d,a);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

是什么意思while(scanf("%d",&n),n)?

c operators while-loop conditional-statements onlinejudge

-2
推荐指数
1
解决办法
5211
查看次数