在使用Linux的x86机器上使用gcc 4.5.2编译时,以下内容不会给我任何警告:
char foo = 255;
Run Code Online (Sandbox Code Playgroud)
但是当我使用时-pedantic,gcc说:
警告:隐式常量转换溢出
gcc行为的方式有点奇怪,这让我怀疑我是否真的理解这项任务中发生了什么.我认为如果charPOSIX上有8位长并且默认情况下是签名,则无法保持255.
在C标准中,它表示无符号整数溢出导致溢出,但未定义有符号整数溢出.这个赋值是不确定的行为?为什么gcc这样做?
在本文件中.27它说文本段从0x400000开始.为什么选择这个特定的地址?有什么理由吗?相同的地址被选择在GNU ld上Linux:
$ ld -verbose | grep -i text-segment
PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS;
Run Code Online (Sandbox Code Playgroud)
这是令人惊讶的,因为这个地址在32位x86可执行文件中更大:
$ ld -verbose | grep -i text-segment
PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS;
Run Code Online (Sandbox Code Playgroud)
我读了这个问题,讨论为什么为i386选择了0x080xxxxx地址,但它没有解释x86_64的变化.在这个问题上很难找到任何解释.有人有线索吗?
AFAIK,Python中没有可用的curses菜单扩展,所以你必须推出自己的解决方案.我知道这个补丁http://bugs.python.org/issue1723038,但我不知道它的当前状态.我找到了一个很好的Python类,在http://www.promisc.org/blog/?p=33包含了我想要的'cmenu',但我也遇到了问题.我想创建一个菜单,用户可以选择一个突出显示的元素,但不是立即执行特定的操作,我想显示另一个菜单,然后可能是另一个,请求输入等.我的第一个想法是删除现有的cmenu screen.clear()或cleanup()但是在绘制新菜单之前不会删除旧菜单,新菜单如下所示:
0. top
1. Exit
2. Another menu
-- end of the old menu that should go away --
3. first
4. second
5. third
Run Code Online (Sandbox Code Playgroud)
没有用于删除cmenu()中项目的remove()方法.我想旧的菜单没有被清除的事实是由display()方法中的'while True'循环引起的,但是当我删除它时,一些奇怪的东西正在发生.我使用的是Python 2.7,这是我目前的代码:
#!/usr/bin/python
#
# Adapted from:
# http://blog.skeltonnetworks.com/2010/03/python-curses-custom-menu/
#
# Goncalo Gomes
# http://promisc.org
#
import signal
signal.signal(signal.SIGINT, signal.SIG_IGN)
import os
import sys
import curses
import traceback
import atexit
import time
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class cmenu(object):
datum = {}
ordered = []
pos = 0
def __init__(self, …Run Code Online (Sandbox Code Playgroud) 到目前为止,我认为它们与由字节组成的字节相同,并且双方需要知道另一侧的字节大小和端点并相应地转换流.然而,维基百科说byte stream!= bit stream(https://en.wikipedia.org/wiki/Byte_stream)并且bit streams专门用于视频编码(https://en.wikipedia.org/wiki/Bitstream_format).在这个RFC https://tools.ietf.org/html/rfc107中,他们讨论了这两件事并进行了描述Two separate kinds of inefficiency arose from bit streams..我的问题是:
今天我了解到,当stdout设置为终端并在不同情况下进行缓冲时,它是行缓冲的.因此,在正常情况下,如果我使用printf()而不使用终止'\n',则仅当缓冲区已满时才会在屏幕上打印.如何获得这个缓冲区的大小,这有多大?
我想将所有的dotfiles git存储在存储库中,每个机器都有单独的分支.我有一个问题我无法解决阻止我使用git它的目的.我想知道其他人是如何解决它的.
我将有一个单独的master分支,其中只包含模板定义和定义,这些定义和定义应该对所有分支都是通用的,例如:
export EMAIL="@EMAIL@"
export SURFRAW_google_results=1000
Run Code Online (Sandbox Code Playgroud)
我将用@EMAIL@机器分支上的正确电子邮件替换并提交它但SURFRAW_google_results保持不变.例如,在work分支上我会有这样的:
export EMAIL="user@corp.com"
export SURFRAW_google_results=1000
Run Code Online (Sandbox Code Playgroud)
现在,我决定改为SURFRAW_google_results=100010.它应该在全球范围内共享,所以我首先要改变它master:
export EMAIL="@EMAIL@"
export SURFRAW_google_results=10
Run Code Online (Sandbox Code Playgroud)
然后在我的基础work上master:
$ git checkout work
$ git rebase master
Run Code Online (Sandbox Code Playgroud)
现在我遇到了冲突,因为我改变的线上方的线是不同的:
<<<<<<< a60114eea1c98d2354a07bd4fd0cdd63cba62e93
export EMAIL="@EMAIL@"
export SURFRAW_google_results=10
=======
export EMAIL="user@corp.com"
export SURFRAW_google_results=1000
>>>>>>> m
Run Code Online (Sandbox Code Playgroud)
如果bash我可以迅速通过采购机制包括机器特定的部分,但不支持包括/采购其他配置,如.fluxbox/keys或.screenrc?
这是我试图调试的程序:
#include <stdio.h>
int i = 5;
int main(void)
{
int x = 3;
display(x);
return 0;
}
void display(int x)
{
for ( i=0; i<x; ++i ) {
printf("i is %d.\n", i);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码来自http://www.dirac.org/linux/gdb/05-Stepping_And_Resuming.php#breakpointsandwatchpoints.这是问题所在:
(gdb) break display
Breakpoint 1 at 0x40051e: file try5.c, line 15.
(gdb) run
Starting program: /home/ja/gdb/learning/try5
Breakpoint 1, display (x=3) at try5.c:15
(gdb) frame 1
#1 0x000000000040050c in main () at try5.c:8
(gdb) break
Breakpoint 2 at 0x40050c: file try5.c, line 8. …Run Code Online (Sandbox Code Playgroud) 编译以下代码段时,gcc和clang都只发出警告.注意\下一个后面的空格int:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int \
a = 10;
printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
GCC:
main.c:7:6:警告:反斜杠和换行符以空格分隔[默认启用]
铛:
main.c:7:7:警告:反斜杠和换行符以空格分隔int ^
在5.1.1.2的c99标准中,它说:
删除反斜杠字符()后面紧跟一个新行字符的每个实例,拼接物理源代码行以形成逻辑源代码行.
为什么C编译器不符合C标准?我认为只有他们的创作者决定不这样做.我在gcc邮件列表上发现了一条消息,我认为这引起了这种行为:http://gcc.gnu.org/ml/gcc-patches/2000-09/msg00430.html.在那里,他们说这是完成的,因为尾随空格是常见的,他们不想将它们视为错误.这有多常见?
我意识到大多数CPU更擅长在对齐的内存地址读取数据,即内存地址是CPU字的倍数.但是,在很多地方我都读过有关分配页面对齐内存的内容.为什么有人想要获得页面对齐的内存地址?它只是为了更大的表现吗?
我不时偶然发现“git rebase”导致的冲突数量少于“git merge”的说法,例如这里:为什么 git rebase 通常比合并有更少的合并冲突?. 这是否意味着可能git-merge <BRANCH_A> <BRANCH_B>会出现失败的情况,我会做git reset --hard ORIG_HEAD,然后做,然后git-rebase <BRANCH_B> <BRANCH_A>会成功?你能举一个这种情况的例子吗?