代码之家  ›  专栏  ›  技术社区  ›  Alok

pragma指令在C语言中的使用

  •  0
  • Alok  · 技术社区  · 4 年前

    我正在尝试使用Visual Studio 2019学习C语言,并尝试了以下代码

    #include <stdio.h>
    void f1();
    # pragma startup f1
    int main()
    {
        printf("Hey");
        return 0;
    }
    void f1()
    {
        printf("Hello1\n");
    
    }
    

    我希望输出是
    你好
    嘿

    但我越来越
    嘿

    期待我在这里做错了什么。

    谢谢

    0 回复  |  直到 4 年前
        1
  •  2
  •   Lundin    4 年前

    您使用的示例只适用于Borland/Embarcadero编译器,这本书的作者应该为您澄清。这个pragma不适用于MCV、gcc和clang编译器。

    对于类似gcc的编译器,可以使用以下编译器扩展:

    void f1 (void); 
    
    void __attribute__((constructor)) f1 (void) 
    { 
      puts("Hello world"); 
    }
    

    关于 让我们来看看C 事实证明你在读一本无能作家写的有害的书。从SO的C图书推荐列表中:

    也不要用这本书 Let Us C (16 th Yashwant Kanetkar于2017年出版)。许多人认为这是一本教Turbo C的过时的书,书中有很多过时的、误导性的和不正确的材料。例如,第137页讨论了 printf("%d %d %d\n", a, ++a, a++) 并没有将其归类为 undefined behaviour 应该如此。它还始终如一地促进不可移植和有缺陷的编码实践,比如使用 gets , %[\n]s 在里面 scanf ,存储 getchar 在类型变量中 char 或者使用 fflush 在…上 stdin .

    这本书已经在这个网站上被至少两位著名的、受人尊敬的C大师阅读和评论过,上面的说法表明这本书不仅过时了,而且非常糟糕。算上你的真心话,现在至少有三位10万以上的rep C tag用户对这本书提出了强烈的反对意见。

    你需要立即停止阅读这本有害的书。请把这篇文章给老师看。