小编the*_*ish的帖子

isupper() 是宏还是函数?

我正在阅读一本关于 c++ 的书(Ulla Kirch-Prinz 和 Peter Prinz 编写的 C++ 编程完整指南;ISBN:0-7637-1817-3),它提到 isupper()、islower()、isalpha( )、isdigit()、isalnum()、isspace() 和 isprint() 是用于字符分类的宏

我觉得这种奇怪有两个原因:

  1. 在同一本书中,它讨论了如何,即使宏可以有参数,它们本质上仍然只是用定义填充的占位符名称。这看起来很奇怪,因为我不知道有条件地操作什么样的替换文本。这听起来更符合函数或内置操作(如sizeof)。

  2. 这似乎也很奇怪,因为我听说有些人称这些函数,而我也听到有些人称它们为宏。

任何解释将不胜感激。我对此比较陌生,所以我仍在努力弄清楚这一切。谢谢你。

c++ macros function c-preprocessor

4
推荐指数
2
解决办法
182
查看次数

什么时候可以创建“保留”标识符?

我认为我可以学习和改进编程的最好方法之一就是查看各种源代码。我正在查看 Blender 的源代码并注意到有关头文件的一些信息。它们中的大多数#ifndef包括守卫,其中宏被双下划线包围(例如__BMESH_CLASS_H__)。

这让我想到,整个“只是不作出任何以下划线开始在所有”的建议是对于初学者好,但我认为,为了在编程创造我自己的保留标识符时,我应该学习取得进一步进展是和不合适

c c++

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

这么有限的寄存器,怎么会有这么多的寄存器变量呢?

我在玩 C 时,我意识到,如果我声明了一堆寄存器变量,这些值不会被覆盖吗?从我从组装中可以看出,微处理器中没有大量寄存器,不足以满足我创建的需求。C 如何保留所有值?

c variables assembly microprocessors

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

SoX 不会使用“播放”运行。'play' 不是内部或外部命令,也不是可运行的程序或批处理文件

我已经添加sox到我的 PATH 中,它似乎做得很好。如果我打开终端并输入C:\Users\[EXAMPLE USERNAME]>sox,程序将运行所有选项和效果。问题是我似乎play无法上班。我已经试过C:\Users\[EXAMPLE USERNAME]>play file.ogg这给产生错误:'play' is not recognized as an internal or external command, operable program or batch file。我不完全确定这里发生了什么。

我通常会考虑创建一个 PATH 变量,play但正如在这个问题的答案的评论中提到的那样,没有可执行文件,它的sox名称不同。

另外,作为参考,我在 Windows 10 上使用 sox-14-4-2。

sox

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

对于不透明指针,C 中的链接如何工作?

因此,我对各种事物的链接感到有些困惑。对于这个问题,我将重点讨论不透明指针。

我将用一个例子来说明我的困惑。假设我有这三个文件:

主程序

#include <stdio.h>
#include "obj.h"            //this directive is replaced with the code in obj.h

int main()
{
    myobj = make_obj();
    setid(myobj, 6);

    int i = getid(myobj);
    printf("ID: %i\n",i);

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

对象文件

#include <stdlib.h>

struct obj{
    int id;
};

struct obj *make_obj(void){
    return calloc(1, sizeof(struct obj));
};

void setid(struct obj *o, int i){
    o->id = i;
};

int getid(struct obj *o){
    return o->id;
};
Run Code Online (Sandbox Code Playgroud)

对象文件

struct obj;

struct obj *make_obj(void);

void setid(struct obj *o, int i);

int …
Run Code Online (Sandbox Code Playgroud)

c linker struct pointers opaque-pointers

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

嵌套的 if...else 语句如何胜过 C++ 中的一系列单选 if 语句

我正在阅读C++:如何编程, Paul 和 Harvey Deitel 的第九版,我在第 114 页发现了一些让我感到困惑的东西。

书中给出了示例代码:

if ( studentGrade >= 90 ) // 90 and above gets "A"
    cout << "A";
else
    if ( studentGrade >= 80 ) // 80-89 gets "B"
        cout << "B";
    else
        if ( studentGrade >= 70 ) // 70-79 gets "C"
            cout << "C";
        else
            if ( studentGrade >= 60 ) // 60-69 gets "D"
                cout << "D";
            else // less than 60 gets "F"
                cout << "F";
Run Code Online (Sandbox Code Playgroud)

这本书接着说: …

c++ performance if-statement

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