小编And*_*ing的帖子

使用长双后缀L定义的浮点限制(双精度)

1.问题:

我有一个关于这个问题DBL_MAX,并DBL_MIN在Linux中定义使用gcc v4.8.5.
它们的定义limit.h如下:

#define DBL_MAX     __DBL_MAX__
#define DBL_MIN     __DBL_MIN__
Run Code Online (Sandbox Code Playgroud)

在哪里__DBL_MIN____DBL_MAX__特定于编译器,可以通过以下方式获得:

$ gcc -dM -E - < /dev/null
...
#define __DBL_MAX__ ((double)1.79769313486231570815e+308L)
#define __DBL_MIN__ ((double)2.22507385850720138309e-308L)
...
Run Code Online (Sandbox Code Playgroud)

我的问题是:
为什么将值定义为long double后缀L,然后再将其转换为double

2.问题:

为什么__DBL_MIN_10_EXP__定义的-307但是最小指数是-308DBL_MIN宏中使用的?在最大指数的情况下,它被定义308,我可以理解,因为DBL_MAX宏使用它.

#define __DBL_MAX_10_EXP__ 308
#define __DBL_MIN_10_EXP__ (-307)
Run Code Online (Sandbox Code Playgroud)

不是问题的一部分,只是我做的观察:

通过使用Windows与Visual Studio 2015年的路上有只DBL_MAXDBL_MIN没有编译器的具体重定向的版本,以与下划线定义的宏.此外,最小正双精度值DBL_MIN和最大双精度值DBL_MAX比我的Linux gcc编译器的值略大(仅与上面gcc v4.8.5中定义的宏相比):

#define …
Run Code Online (Sandbox Code Playgroud)

floating-point gcc

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

C中的数据类型混淆

以下代码有效:

int main(void)
{  
   float f = get_float();
   int i = round(f*100);
   printf("%i\n", i); 
}
Run Code Online (Sandbox Code Playgroud)

然而,如果以这种方式编码会产生错误:

printf("%i\n", round(1.21*100));
Run Code Online (Sandbox Code Playgroud)

输出说round(1.21*100)float.那么,为什么呢

int i = round(f*100); 
Run Code Online (Sandbox Code Playgroud)

很好吗?

c type-conversion

5
推荐指数
2
解决办法
335
查看次数

具有多个条件的默认模板特化

我想为整数类型、字符串和其他类型定义函数。

我可以写:

template<typename T, typename = std::enable_if<std::is_integral<T>::value>::type>
void foo();

template<typename T, typename = std::enable_if<std::is_same<std::string>::value>::type>
void foo();
Run Code Online (Sandbox Code Playgroud)

但是我如何定义在其他情况下将被调用的函数(如果T不是整数类型而不是std::string)?

c++ sfinae c++11

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

在C中跳过读取文本文件的标题

我正在从文件中读取数据orderedfile.txt。有时该文件具有以下形式的标题:

BEGIN header

       Real Lattice(A)               Lattice parameters(A)    Cell Angles
   2.4675850   0.0000000   0.0000000     a =    2.467585  alpha =   90.000000
   0.0000000  30.0000000   0.0000000     b =   30.000000  beta  =   90.000000
   0.0000000   0.0000000  30.0000000     c =   30.000000  gamma =   90.000000

 1                            ! nspins
25   300   300                ! fine FFT grid along <a,b,c>
END header: data is "<a b c> pot" in units of Hartrees

 1     1     1            0.042580
 1     1     2            0.049331
 1     1     3            0.038605
 1     1     4            0.049181
Run Code Online (Sandbox Code Playgroud)

有时没有标题,数据从第一行开始。我的读取数据的代码如下所示。当数据从第一行开始但不存在标题时它会起作用。有办法解决这个问题吗?

int …
Run Code Online (Sandbox Code Playgroud)

c file-io

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

不同大小的相同枚举类型

以下代码中枚举类型的大小不同,为什么?枚举类型的声明是否会导致gcc将其视为signed int?此功能会导致我的项目出现问题,例如,"file_1.c"中一个枚举类型的大小为1,但"file_2.c"中的大小为4.

我的测试代码:

enum foo foo_test(void);

enum foo {
    FOO_0
};

enum bar {
    BAR_0
};

int main(int argc, char **argv)
{
    printf("sizeof(enum foo) %d, sizeof(enum bar) %d\n", sizeof(enum foo), sizeof(enum bar));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  • 当我在我的嵌入式项目中使用arm-none-eabi-gcc v4.9.3编译它时

    • 输出是sizeof(enum foo) 4, sizeof(enum bar) 1.
  • 当我在Windows中使用gcc v4.8.3编译它时

    • 编译 gcc -Wall -o sizeofTest.exe sizeofTest.c
      • 输出是sizeof(enum foo) 4, sizeof(enum bar) 4.
    • 编译 gcc -Wall -fshort-enums -o sizeofTest.exe sizeofTest.c
      • 输出是sizeof(enum foo) 4, sizeof(enum bar) 1.

c embedded enums

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

批量退出for循环

for如果计数j达到 ,我不想离开循环0

set /a j=3
for /R c:\dsd_imports\ad_and_deal %%i IN (*.*) DO (
  MDI_import_ad_command.bat C:\DSD_IMPORTS\AD_AND_DEAL\%%~nxi
  MOVE %%i c:\dsd_imports\ad_and_deal\in_process
  set /a j=j-1
  if j == 0
     break
)
Run Code Online (Sandbox Code Playgroud)

windows for-loop if-statement batch-file

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

C通过引用或通过值将结构数组传递给函数

我在C中有一个函数,它接受一个结构数组作为参数:

int load_ini_parms(char * ini_file,
                   struct test_object s[],
                   int num,
                   struct lwm2m_object * l)
Run Code Online (Sandbox Code Playgroud)

我的问题是,将指针传递给结构数组是否会更好?有什么优点或缺点?

c struct pass-by-reference pass-by-value

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

带有 new 运算符的类中的静态成员变量

我可以在 C++ 中使用 new 声明静态数据成员吗?如果我们可以用 new 声明静态数据成员,那么如何初始化该静态数据成员?

class A
{ 
    static int *p = new int;     
}

int * A :: p = 
Run Code Online (Sandbox Code Playgroud)

c++

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

运算符重载C++,(+, - ,*,/等)是否有比复制,替换和粘贴更聪明的方法?

我正在编写一种矩阵库,所以我operator +使用运算符重载给了我的矩阵a .它看起来像这样.

friend matrix<T, size_x, size_y>  operator + (const matrix<T, size_x, size_y> & Input_1, const matrix<T, size_x, size_y> & Input_2){
    matrix<T, size_x, size_y> Output;
        for (int i=0; i<size_x; i++){
            for (int j=0; j<size_y; j++){
                Output.value[i][j]=Input_1.value[i][j]+Input_2.value[i][j];
            }
        }
    return Output;
}       
Run Code Online (Sandbox Code Playgroud)

到目前为止,正如我测试它,它的工作原理.现在我也想添加 - ,/,*运算符,它们都是一样的.当然我可以使用复制,替换和粘贴.但这对可读性和可维护性不利.是否有一个更智能的解决方案,也许是一个概念,因为我不知道谷歌的概念名称吗?我刚刚发现,如何使单个运算符超载.

c++ operator-overloading operators

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

Ghostscript PDF批量压缩

我在Windows上安装了Ghostscript,因为我要做的是压缩/减少网络共享上12,000多个PDF文件的大小.任何GUI软件都无法做到这一点,因为资源耗尽导致它们在一段时间后就会爆炸,所以我认为命令行是这里的方法.

我已经阅读了Ghostscript文档和压缩PDF文件的不同示例,但我似乎无法找到任何大批量操作.

基本上,我需要定位多个文件夹来递归压缩将在网络共享上的文件.

使用Ghostscript可以这样做吗?如果是这样,请通过一些命令示例来帮助我实现这一点.

谢谢!

windows command-line ghostscript

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