所以,让我说我粗心大意并犯了一个愚蠢的错字..这个档案:
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)
编辑:找到解决方案
似乎使用命令行工具gcc并g++在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) 因此,一些匿名开发人员决定使用一种荒谬的约定,即在包含其源文件的文件夹名称中使用空格。我会更改这些文件夹以不使用空格,但遗憾的是我没有在这里制定规则,因此这不是一个选项(尽管我希望是这样)。
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)
有没有办法在不重命名文件夹的情况下解决这个问题?
提前致谢。
我知道删除操作符以及它如何自动调用类的析构函数.但是,我最近看到有人直接调用了类的析构函数,这对我来说似乎很奇怪.所以我写了一个简短的程序,给出了一个非常不期望的结果:
#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()时会发生什么?有什么情况可以这么做吗?
简单的问题,但我似乎无法在网上找到答案,这真的令人沮丧.
假设我有这个错误的代码我正在尝试调试:
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,但似乎没有任何工作:(