标签: c

##对C(C++)预处理器意味着什么?

我有一个C程序如下:

#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
Run Code Online (Sandbox Code Playgroud)

当我只运行预处理器时,它将其扩展为

{
int var12=100;
printf("%d",var12);
}
Run Code Online (Sandbox Code Playgroud)

这就是输出为100的原因.

谁能告诉我预处理器如何扩展var##12 to var12

c stringification c-preprocessor

12
推荐指数
3
解决办法
8697
查看次数

常量表达式的数学函数是否在编译时预先计算?

我倾向于使用常量表达式的数学函数来获得方便性和连贯性(即log(x)/log(2)代替log(x)/0.3...).由于这些函数实际上并不是语言本身的一部分,它们都没有定义math.h(仅声明),常量的函数会在编译时预先计算,还是会在运行时浪费计算?

c math compile-time

12
推荐指数
2
解决办法
7114
查看次数

在for循环中会调用strlen()多少次?

下面的strlen()函数是否只被调用一次(存储的值用于进一步的比较); 或者每次进行比较时都会调用它?

for (i = 0; i < strlen(word); i++)
{ /* do stuff */ }
Run Code Online (Sandbox Code Playgroud)

c loops

12
推荐指数
3
解决办法
3262
查看次数

C编程++运算符

为什么这段代码总能产生x=2

unsigned int x = 0;
x++ || x++ || x++ || x++ || ........;
printf("%d\n",x);
Run Code Online (Sandbox Code Playgroud)

c post-increment

12
推荐指数
4
解决办法
837
查看次数

如何使用gdb调试?

我试图在我的程序中添加一个断点

b {line number}
Run Code Online (Sandbox Code Playgroud)

但我总是得到一个错误,上面写着:

No symbol table is loaded.  Use the "file" command.
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

c gdb

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

主要功能不返回任何东西.为什么?

关于C/C++,main()必须始终返回一个整数(零表示成功,非零表示失败).我可以理解这一点,因为程序运行它变成一个进程,每个进程都应该有一个退出状态,我们通过echo $获得?在进程结束后从shell中获取.

现在我不明白为什么main方法不能在Java中返回任何内容?它是否与程序在JVM上运行并且JVM进程可以返回以返回退出状态这一事实有什么关系?

请澄清.

谢谢,
罗杰

c c++ java jvm

12
推荐指数
3
解决办法
4562
查看次数

如何通过更改其成员的顺序来查找可以缩小的所有结构

背景:编译器可以在结构中插入填充以使其成员更好地对齐.这将导致结构的大小大于其成员大小的总和.重新排序结构的成员以便它们更好地打包可以消除编译器以这种方式填充的需要并使结构更小以节省内存.我需要节省内存.

后备选项是手动检查每个结构.我正在寻找一种可以减少工作量的自动化方法.

即使它只减少了手工检查的结构数量,也会有所帮助.

因此,例如,一个进程/工具/等列出了大于其成员大小总和的所有结构,虽然不完美仍然有用,因为它会限制需要手动检查的结构.

有没有人知道任何可以做到这一点的工具,或者任何人都可以建议任何可能有用的方法.

ps我需要在包含超过100万行代码的嵌入式C代码库中执行此操作.

c memory embedded struct

12
推荐指数
2
解决办法
1250
查看次数

在C-中的strpos如何工作

我真的很新C.

我想使用strpos函数,但它告诉我它不存在?

c

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

如何逐行读取unicode(utf-8)/二进制文件

嗨程序员,

我想逐行读取由记事本创建的Unicode(UTF-8)文本文件,我不想在屏幕上显示Unicode字符串,我只想阅读并比较字符串!

此代码逐行读取ANSI文件,并比较字符串

我想要的是

逐行阅读test_ansi.txt

如果line ="b"打印"YES!"

别打印"不!"

read_ansi_line_by_line.c

#include <stdio.h>

int main()
{
    char *inname = "test_ansi.txt";
    FILE *infile;
    char line_buffer[BUFSIZ]; /* BUFSIZ is defined if you include stdio.h */
    char line_number;

    infile = fopen(inname, "r");
    if (!infile) {
        printf("\nfile '%s' not found\n", inname);
        return 0;
    }
    printf("\n%s\n\n", inname);

    line_number = 0;
    while (fgets(line_buffer, sizeof(line_buffer), infile)) {
        ++line_number;
        /* note that the newline is in the buffer */
        if (strcmp("b\n", line_buffer) == 0 ){
            printf("%d: YES!\n", line_number);
        }else{
            printf("%d: …
Run Code Online (Sandbox Code Playgroud)

c windows encoding utf-8

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

如何在Make文件中定义#define

在我的c/c ++文件中,有多个#define.举个例子:

#ifdef LIBVNCSERVER_HAVE_LIBZ
  /* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
  /* some more code */
Run Code Online (Sandbox Code Playgroud)

你能否告诉我如何修改我的Makefile.in以便在编译期间在所有文件中都有#define ?

谢谢.

c makefile autotools

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