小编OLL*_*OLL的帖子

编译器可以在使用未初始化的值时发出警告吗?

所以,让我说我粗心大意并犯了一个愚蠢的错字..这个档案:

test.c的

#include <stdio.h>

int main()
{
    int x = x;
    printf("%d\n",x);
}
Run Code Online (Sandbox Code Playgroud)

编译好:

mymachine:~ oll$ gcc test.c 
mymachine:~ oll$ ./a.out 
1782198366
Run Code Online (Sandbox Code Playgroud)

显然int x = x是一个错误,但编译器在没有警告的情况下接受了这个.我浪费了几个小时来尝试这个错误.

是否有一个编译器标志,并且可以用于gcc/g ++以使编译器在使用未初始化的堆栈变量时给出警告?这可能会为我节省很多时间.

我试过gcc -O -Wuninitialized test.c- 没用.

提前致谢

编辑:我试过了-Wall,没有提到x

mymachine:~ oll$ gcc -Wall test.c 
test.c: In function ‘main’:
test.c:7: warning: control reaches end of non-void function
Run Code Online (Sandbox Code Playgroud)

编辑:找到解决方案

似乎使用命令行工具gccg++在OS X 10.8中没有提供此警告,使用clang工程:

mymachine:~ oll$ clang -Wall test.c
test.c:5:10: warning: variable 'x' is …
Run Code Online (Sandbox Code Playgroud)

c gcc warnings

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

如何在xcode中显示objective-c描述

我对Xcode中的"Show Summaries"功能有疑问,这个人正在谈论这个问题.

目前,我实现descriptiondebugDescription在我的Objective-C类中,我可以输入po myObject以快速查看内容,这节省了我的时间.

但是,我想知道是否有办法在这个"Show Summaries"中展示它.有点像拥有NSString的时候,它只是在"内容"窗格中显示字符串而无需您的进一步努力.

我也为自己的对象做这个?这样可以节省我这么多时间:)

谢谢大家.

编辑 感谢Martin R的评论,我设法得到了我想要的东西:) 链接

objective-c xcode4

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

如何处理我的 Makefile 中带有空格的文件?

因此,一些匿名开发人员决定使用一种荒谬的约定,即在包含其源文件的文件夹名称中使用空格。我会更改这些文件夹以不使用空格,但遗憾的是我没有在这里制定规则,因此这不是一个选项(尽管我希望是这样)。

LUAC            = luac

SRC_DIR         = .
SOURCE          =                                                      \
stupid/naming\ convention/a.lua                                        \
stupid/naming\ convention/very\ annoying/b.lua                         \

vpath .lua $(SRC_DIR)

OUT_DIR         = ../out/
OUTPUT          = $(patsubst %.lua, $(OUT_DIR)/%.luac, $(SOURCE))


all: $(OUTPUT)

$(OUT_DIR)/%.luac: %.lua
    $(LUAC) "$<"
    mv luac.out "$@"

.PHONY: all
Run Code Online (Sandbox Code Playgroud)

简单的生成文件。它要做的就是编译我拥有的所有 Lua 文件并将它们放入输出目录中。

无论我做什么,它一直想SOURCE在文件夹中的空格上拆分字符串,所以我以这样的美丽错误结束:

make: *** No rule to make target `stupid/naming ', needed by `all'.  Stop.
Run Code Online (Sandbox Code Playgroud)

有没有办法在不重命名文件夹的情况下解决这个问题?

提前致谢。

makefile

7
推荐指数
2
解决办法
5253
查看次数

C++析构函数实际上是否删除了东西?

我知道删除操作符以及它如何自动调用类的析构函数.但是,我最近看到有人直接调用了类的析构函数,这对我来说似乎很奇怪.所以我写了一个简短的程序,给出了一个非常不期望的结果:

#include <stdio.h>

class A
{
public:
  A()  {a = new int; *a=42; b=33;}
  ~A() {delete a;}

  int* a;
  int  b;
};

int main(int argc, const char ** argv)
{
  A* myA = new A();
  printf("a:%d  b:%d\n", *(myA->a), myA->b);
  myA->~A();
  printf("b:%d\n", myA->b);
  printf("a:%d\n", *(myA->a));
}
Run Code Online (Sandbox Code Playgroud)

所以如你所见,我正在调用析构函数~A(),所以我希望程序在第二次尝试访问变量'a'时会崩溃(因为它在2行之前被删除了).相反..程序只是打印出来没有任何投诉:

a:42  b:33
b:33
a:42
Run Code Online (Sandbox Code Playgroud)

......为什么?当我直接调用~A()时会发生什么?有什么情况可以这么做吗?

c++

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

lldb - 如何杀死陷入无限循环的命令

简单的问题,但我似乎无法在网上找到答案,这真的令人沮丧.

假设我有这个错误的代码我正在尝试调试:

int myBug()
{
    while(1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我用LLDB调试这个并且类型print myBug()我得不到结果,那么(没有惊喜).然而,这意味着我无法再调试,因为LLDB被卡住而不能continue.有没有办法杀死print myBug()命令?到目前为止,唯一的解决方法是退出并重新启动所有内容 - 远非方便.

我在Xcode 4.6.1中使用LLDB,我尝试了一些按键,如Ctrl + C,Ctrl + T,但似乎没有任何工作:(

xcode lldb

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

标签 统计

c ×1

c++ ×1

gcc ×1

lldb ×1

makefile ×1

objective-c ×1

warnings ×1

xcode ×1

xcode4 ×1