Смесительный экстерн и константа

Я могу смешать экстерна и константу как константа экстерна? Если да, спецификатор константы налагает, это - господство только в объеме, в котором это объявляется, или это должно точно соответствовать объявлению переводной единицы, в которой это объявляется? Т.е. могу я объявлять сказать extern const int i; даже когда фактическое я не константа и наоборот?

56
задан legends2k 3 February 2010 в 09:32
поделиться

4 ответа

Обычный шаблон:

  • file.h:
    extern const int a_global_var;
  • file.c:
    #include "file.h"
    const int a_global_var = / * некоторое выражение const * /;

Изменить: включенный комментарий legends2k. Спасибо.

53
ответ дан 26 November 2019 в 17:30
поделиться

Лично я думаю, что я бы использовал функцию с несколькими возвращениями для этой цели:

function intGradeToStrGrade($grade) {
    if ($grade >= 90) return "A";
    if ($grade >= 80) return "B";
    ...
}

Однако здесь были некоторые споры о SO, если несколько возвращений в одной функции ОК или нет. Ваш выбор. Я думаю, что это намного чище, чем затянутое заявление.

-121--4180356-

http://curl.haxx.se/mail/lib-2002-05/0090.html

libcurl не имеет асинхронного интерфейса. Вы можете сделать это самостоятельно либо с использованием потоков или с помощью неблокирующий «мультиинтерфейс», который предложения libcurl. Читать на нескольких интерфейс здесь:

http://curl.haxx.se/libcurl/c/libcurl-multi.html

PHP пример мультиинтерфейса здесь:

http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/

-121--1420976-

Вы можете использовать их вместе и вы можете делать все виды вещей, которые игнорируют ключевое слово const, потому что это все; ключевое слово. Он говорит компилятору, что вы не будете изменять переменную, которая, в свою очередь, позволяет компилятору делать некоторые полезные оптомизации и останавливает вас от изменения вещей, которые вы не хотели.

Possibility.com имеет приличную статью с еще некоторым фоном.

1
ответ дан 26 November 2019 в 17:30
поделиться
$grade=87;
$grades=array("A"=>range(95,100),"B"=>range(80,94),"C"=>range(70,79),"Failed"=>range(0,69));
foreach($grades as $g=>$v){
    if ( in_array($grade,$v) ){
        print $g."\n";
    }
}
-121--4180358-

Я бы рекомендовал не использовать глобальные переменные, если это возможно. Используйте пространство имен и OOP для передачи аргументов объекту.

Этот код принадлежит файлу .js:

var MYLIBRARY = MYLIBRARY || (function(){
    var _args = {}; // private

    return {
        init : function(Args) {
            _args = Args;
            // some other initialising
        },
        helloWorld : function() {
            alert('Hello World! -' + _args[0]);
        }
    };
}());

И в вашем html-файле:

<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
   MYLIBRARY.init(["somevalue", 1, "controlId"]);
   MYLIBRARY.helloWorld();
</script>
-121--1831941-

Да, вы можете использовать их вместе.

Если вы объявляете «extern const int i», то i является const по всей его области. Переопределить его как неконст невозможно. Конечно, можно обойти флаг const, отбросив его (с помощью const_cast).

-1
ответ дан 26 November 2019 в 17:30
поделиться

Вы можете использовать их вместе. Но вам нужно быть последовательным в использовании const, потому что, когда C ++ выполняет оформление имен, const включается в информацию о типе, которая используется для украшения имен символов. поэтому extern const int i будет ссылаться на другую переменную, чем extern int i

, если вы не используете extern «C» {}. Оформление имени C не обращает внимания на const.

5
ответ дан 26 November 2019 в 17:30
поделиться