小编Dun*_*Bug的帖子

你能在宏中大写粘贴的令牌吗?

在C宏中,是否可以大写粘贴的令牌?例如,我目前有以下宏:

#define TEST(name, keyword) \
    test_##name:
        TEST_##keyword##_KEYWORD
Run Code Online (Sandbox Code Playgroud)

我会调用如下:

TEST(test1, TEST1)
Run Code Online (Sandbox Code Playgroud)

这会产生以下结果:

test_test1:
    TEST_TEST1_KEYWORD
Run Code Online (Sandbox Code Playgroud)

现在,不是必须两次输入相同的名称(一次使用所有小写字符,再次使用所有大写字符),是否有任何方法可以执行以下任一操作,并将标记更改为全部大写字母还是所有小写字母?

TEST(test1) or TEST(TEST1)
Run Code Online (Sandbox Code Playgroud)

谢谢,瑞恩

c macros

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

面向对象的设计实践问题

在过去的几年里,我几乎一直在开发C代码.我目前正在寻求提高我的面向对象设计技能.任何人都可以推荐任何具有一套体面的面向对象设计问题的资源以及一些可能的解决方案/分析吗?理想情况下,在面试中可以在15-30分钟内完成/分析的问题中,我可以选择一个足够小的问题来绘制和设计.

谢谢!

oop

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

在Makefile'foreach'循环中添加换行符

是否可以foreach在Makefile 的循环中插入要执行的换行符?

目前,我有以下内容:

$(foreach my_lib,$(MY_LIBS),$(call my_func,results,boxer,$(my_lib)))
Run Code Online (Sandbox Code Playgroud)

现在,假设我有:

MY_LIBS = lib1 \
          lib2
Run Code Online (Sandbox Code Playgroud)

以上foreach循环将评估为:

lib1 lib2
Run Code Online (Sandbox Code Playgroud)

我希望这个评估为:

lib1
lib2
Run Code Online (Sandbox Code Playgroud)

是否可以在foreach循环中插入换行符来实现此目的?

谢谢.

makefile

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

Python实例变量作为默认参数

我正在编写一个Python函数,它将超时值作为参数.通常,用户将始终使用相同的超时值,但有时他可能想要稍微等待一段时间.超时值存储为类实例变量.我想使用类的超时实例变量作为默认参数.目前,我正在实施如下:

def _writeAndWait (self, string, timeout = -1):
    if (timeout == -1):
        timeout = self._timeout
Run Code Online (Sandbox Code Playgroud)

我只是想知道,使用实例变量作为默认参数的正确方法是什么?或者有更好的方法可以避免"if"检查吗?

python

14
推荐指数
2
解决办法
4886
查看次数

C 64位指针对齐

64位系统上的指针是否仍然是4字节对齐(类似于32位系统上的双精度)?或者他们注意到8字节对齐?

例如,在64位系统上,以下数据结构有多大:

struct a {
    void* ptr;
    char myChar;
}
Run Code Online (Sandbox Code Playgroud)

指针是否会被8字节对齐,导致字符的填充为7个字节(总计= 8 + 8 = 16)?或者指针是4字节对齐(4字节+4字节)导致3个字节的填充(总计= 4 + 4 + 4 = 12)?

谢谢,瑞恩

c 64-bit alignment

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

使用Doxygen评论的Emacs c-mode fill-paragraph

我有一个问题与Getting Emacs fill-paragraph非常相似,可以很好地使用类似javadoc的注释,但我不确定我是否会在一年前的帖子中得到很多答案.

无论如何,我有一些C代码有一些Doxygen评论,如下所示:

/**
 * Description
 *
 * @param[in,out] var1 : <Long description that needs to be wrapped.>
 * @param[in,out] var2 : <Description2>
 */
Run Code Online (Sandbox Code Playgroud)

现在,当我在emacs中使用Mq时,我想要以下内容:

/**
 * Description
 *
 * @param[in,out] var1 : <Long description that needs
 *                       to be wrapped.>
 * @param[in,out] var2 : <Description2>
 */
Run Code Online (Sandbox Code Playgroud)

但是,目前我得到以下内容:

/**
 * Description
 *
 * @param[in,out] var1 : <Long description that needs
 * to be wrapped.>  @param[in,out] var2 : <Description2>
 */
Run Code Online (Sandbox Code Playgroud)

做一些研究,看起来我需要在emacs中设置paragraph-start变量来识别"@param".我发现了另一个关于堆栈溢出的问题(让Emacs fill-paragraph与javadoc类似的注释很好),它有一个样本正则表达式.我修改了一点,以适应我的要求,我测试了搜索- …

emacs doxygen c-mode

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

iOS Passbook序列号:哪些字符有效?最大长度是多少?

Passbook for iOS使用您的服务器可用于识别特定传递的序列号.

有谁知道存折序列号中哪些字符有效?我知道数字和字母是有效的,但符号/标点符号也是有效的(例如" - "和".")?

序号的最大长度是多少?

谢谢.

ios passbook

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

导致"左但未输入"GCC编译错误的原因是什么?

我们最近遇到了以下编译器错误,该错误在整个构建过程中的不同位置重复:

line-map.c: file "<a source_file name>" left but not entered
Run Code Online (Sandbox Code Playgroud)

源文件在构建中的不同点处是不同的.一段时间后,编译器最终抛出以下错误:

<header file>: In function `<function name that is not present within the given header file>':
<same header file>:-117020: internal compiler error: in final_scan_insn, at final.c:1790
Run Code Online (Sandbox Code Playgroud)

经过大量调查后,我们发现此错误是由不同头文件中的某些#defines引起的:

#define GEOGRAPHIC_LOC_TYPE_CGI            0
#define GEOGRAPHIC_LOC_TYPE_SAI            1
#define GEOGRAPHIC_LOC_TYPE_RAI            2
#define GEOGRAPHIC_LOC_TYPE_TAI          128
#define GEOGRAPHIC_LOC_TYPE_ECGI         129
#define GEOGRAPHIC_LOC_TYPE_TAI_AND_ECGI 130
Run Code Online (Sandbox Code Playgroud)

我们将这些#defines从它们当前存在的头文件中移动到.c文件中,该文件是当前使用它们的唯一位置.然后,我们再也看不到编译器错误了.

任何人都可以解释上面的编译器错误是什么意思以及为什

谢谢,瑞恩

c gcc compiler-errors

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

多维char数组在函数内打印,但在传递给另一个函数时则不会

我试图将数据写入多维数组,然后将数组作为a传递const char**给另一个函数.当我char*在声明它的函数中打印本地时,一切都按预期工作.但是,当我尝试char*在另一个函数中打印数组时,它们都是空字符串.

我使用以下代码:

void my_print (const char** lines, unsigned int num)
{
    int i = 0;

    for (i = 0; i < num; i++) {
        fprintf(stderr, "lines[%d]:  %s", i, lines[i]);
    }
}

void my_func ()
{
    char cfg[2][200];
    unsigned int value = 5;

    snprintf(cfg[0], 200, "one two three\n");
    snprintf(cfg[1], 200, "my value = %u\n", value);

    fprintf(stderr, "lines[0] = %slines[1] = %s\n", cfg[0], cfg[1]);

    my_print((const char**) cfg, 2);
}
Run Code Online (Sandbox Code Playgroud)

这导致以下输出:

lines[0] = one two three …
Run Code Online (Sandbox Code Playgroud)

c

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

标签 统计

c ×4

64-bit ×1

alignment ×1

c-mode ×1

compiler-errors ×1

doxygen ×1

emacs ×1

gcc ×1

ios ×1

macros ×1

makefile ×1

oop ×1

passbook ×1

python ×1